Modified: 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.html
==============================================================================
--- 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.html
 (original)
+++ 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.html
 Sat Apr  1 21:10:25 2023
@@ -35,130 +35,112 @@
 <span class="source-line-no">022</span><span id="line-22">import 
javax.inject.Named;</span>
 <span class="source-line-no">023</span><span id="line-23"></span>
 <span class="source-line-no">024</span><span id="line-24">import 
java.util.ArrayList;</span>
-<span class="source-line-no">025</span><span id="line-25">import 
java.util.Collections;</span>
-<span class="source-line-no">026</span><span id="line-26">import 
java.util.List;</span>
-<span class="source-line-no">027</span><span id="line-27">import 
java.util.Objects;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import 
org.apache.maven.enforcer.rule.api.EnforcerRuleException;</span>
-<span class="source-line-no">030</span><span id="line-30">import 
org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;</span>
-<span class="source-line-no">031</span><span id="line-31">import 
org.apache.maven.enforcer.rules.utils.ArtifactUtils;</span>
-<span class="source-line-no">032</span><span id="line-32">import 
org.eclipse.aether.collection.DependencyCollectionContext;</span>
-<span class="source-line-no">033</span><span id="line-33">import 
org.eclipse.aether.collection.DependencySelector;</span>
-<span class="source-line-no">034</span><span id="line-34">import 
org.eclipse.aether.graph.Dependency;</span>
-<span class="source-line-no">035</span><span id="line-35">import 
org.eclipse.aether.graph.DependencyNode;</span>
-<span class="source-line-no">036</span><span id="line-36">import 
org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;</span>
+<span class="source-line-no">025</span><span id="line-25">import 
java.util.Arrays;</span>
+<span class="source-line-no">026</span><span id="line-26">import 
java.util.Collections;</span>
+<span class="source-line-no">027</span><span id="line-27">import 
java.util.List;</span>
+<span class="source-line-no">028</span><span id="line-28">import 
java.util.Objects;</span>
+<span class="source-line-no">029</span><span id="line-29"></span>
+<span class="source-line-no">030</span><span id="line-30">import 
org.apache.maven.enforcer.rule.api.EnforcerRuleException;</span>
+<span class="source-line-no">031</span><span id="line-31">import 
org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;</span>
+<span class="source-line-no">032</span><span id="line-32">import 
org.apache.maven.enforcer.rules.utils.ArtifactUtils;</span>
+<span class="source-line-no">033</span><span id="line-33">import 
org.eclipse.aether.graph.DependencyNode;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">import static 
org.apache.maven.artifact.Artifact.SCOPE_PROVIDED;</span>
+<span class="source-line-no">036</span><span id="line-36">import static 
org.apache.maven.artifact.Artifact.SCOPE_TEST;</span>
 <span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38">import static 
org.apache.maven.artifact.Artifact.SCOPE_PROVIDED;</span>
-<span class="source-line-no">039</span><span id="line-39">import static 
org.apache.maven.artifact.Artifact.SCOPE_TEST;</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41">/**</span>
-<span class="source-line-no">042</span><span id="line-42"> * @author &lt;a 
href="mailto:[email protected]"&gt;Rex Hoffman&lt;/a&gt;</span>
-<span class="source-line-no">043</span><span id="line-43"> */</span>
-<span class="source-line-no">044</span><span 
id="line-44">@Named("dependencyConvergence")</span>
-<span class="source-line-no">045</span><span id="line-45">public final class 
DependencyConvergence extends AbstractStandardEnforcerRule {</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">    private boolean 
uniqueVersions;</span>
-<span class="source-line-no">048</span><span id="line-48"></span>
-<span class="source-line-no">049</span><span id="line-49">    private 
List&lt;String&gt; includes;</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51">    private 
List&lt;String&gt; excludes;</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">    private 
DependencyVersionMap dependencyVersionMap;</span>
-<span class="source-line-no">054</span><span id="line-54"></span>
-<span class="source-line-no">055</span><span id="line-55">    private final 
ResolveUtil resolveUtil;</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57">    @Inject</span>
-<span class="source-line-no">058</span><span id="line-58">    public 
DependencyConvergence(ResolveUtil resolveUtil) {</span>
-<span class="source-line-no">059</span><span id="line-59">        
this.resolveUtil = Objects.requireNonNull(resolveUtil);</span>
-<span class="source-line-no">060</span><span id="line-60">    }</span>
-<span class="source-line-no">061</span><span id="line-61"></span>
-<span class="source-line-no">062</span><span id="line-62">    @Override</span>
-<span class="source-line-no">063</span><span id="line-63">    public void 
execute() throws EnforcerRuleException {</span>
+<span class="source-line-no">038</span><span id="line-38">/**</span>
+<span class="source-line-no">039</span><span id="line-39"> * @author &lt;a 
href="mailto:[email protected]"&gt;Rex Hoffman&lt;/a&gt;</span>
+<span class="source-line-no">040</span><span id="line-40"> */</span>
+<span class="source-line-no">041</span><span 
id="line-41">@Named("dependencyConvergence")</span>
+<span class="source-line-no">042</span><span id="line-42">public final class 
DependencyConvergence extends AbstractStandardEnforcerRule {</span>
+<span class="source-line-no">043</span><span id="line-43"></span>
+<span class="source-line-no">044</span><span id="line-44">    // 
parameters</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">    private boolean 
uniqueVersions;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">    private 
List&lt;String&gt; includes;</span>
+<span class="source-line-no">049</span><span id="line-49"></span>
+<span class="source-line-no">050</span><span id="line-50">    private 
List&lt;String&gt; excludes;</span>
+<span class="source-line-no">051</span><span id="line-51"></span>
+<span class="source-line-no">052</span><span id="line-52">    private 
List&lt;String&gt; excludedScopes = Arrays.asList(SCOPE_TEST, 
SCOPE_PROVIDED);</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">    // parameters - 
end</span>
+<span class="source-line-no">055</span><span id="line-55"></span>
+<span class="source-line-no">056</span><span id="line-56">    private 
DependencyVersionMap dependencyVersionMap;</span>
+<span class="source-line-no">057</span><span id="line-57"></span>
+<span class="source-line-no">058</span><span id="line-58">    private final 
ResolverUtil resolverUtil;</span>
+<span class="source-line-no">059</span><span id="line-59"></span>
+<span class="source-line-no">060</span><span id="line-60">    @Inject</span>
+<span class="source-line-no">061</span><span id="line-61">    public 
DependencyConvergence(ResolverUtil resolverUtil) {</span>
+<span class="source-line-no">062</span><span id="line-62">        
this.resolverUtil = Objects.requireNonNull(resolverUtil);</span>
+<span class="source-line-no">063</span><span id="line-63">    }</span>
 <span class="source-line-no">064</span><span id="line-64"></span>
-<span class="source-line-no">065</span><span id="line-65">        
DependencyNode node = resolveUtil.resolveTransitiveDependencies(</span>
-<span class="source-line-no">066</span><span id="line-66">                // 
TODO: use a modified version of ExclusionDependencySelector to process excludes 
and includes</span>
-<span class="source-line-no">067</span><span id="line-67">                new 
DependencySelector() {</span>
-<span class="source-line-no">068</span><span id="line-68">                    
@Override</span>
-<span class="source-line-no">069</span><span id="line-69">                    
public boolean selectDependency(Dependency dependency) {</span>
-<span class="source-line-no">070</span><span id="line-70">                     
   // regular OptionalDependencySelector only discriminates optional 
dependencies at level 2+</span>
-<span class="source-line-no">071</span><span id="line-71">                     
   return !dependency.isOptional()</span>
-<span class="source-line-no">072</span><span id="line-72">                     
           // regular scope selectors only discard transitive 
dependencies</span>
-<span class="source-line-no">073</span><span id="line-73">                     
           // and always allow direct dependencies</span>
-<span class="source-line-no">074</span><span id="line-74">                     
           &amp;&amp; !dependency.getScope().equals(SCOPE_TEST)</span>
-<span class="source-line-no">075</span><span id="line-75">                     
           &amp;&amp; !dependency.getScope().equals(SCOPE_PROVIDED);</span>
-<span class="source-line-no">076</span><span id="line-76">                    
}</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78">                    
@Override</span>
-<span class="source-line-no">079</span><span id="line-79">                    
public DependencySelector deriveChildSelector(DependencyCollectionContext 
context) {</span>
-<span class="source-line-no">080</span><span id="line-80">                     
   return this;</span>
-<span class="source-line-no">081</span><span id="line-81">                    
}</span>
-<span class="source-line-no">082</span><span id="line-82">                
},</span>
-<span class="source-line-no">083</span><span id="line-83">                // 
process dependency exclusions</span>
-<span class="source-line-no">084</span><span id="line-84">                new 
ExclusionDependencySelector());</span>
-<span class="source-line-no">085</span><span id="line-85">        
dependencyVersionMap = new 
DependencyVersionMap().setUniqueVersions(uniqueVersions);</span>
-<span class="source-line-no">086</span><span id="line-86">        
node.accept(dependencyVersionMap);</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88">        
List&lt;CharSequence&gt; errorMsgs = new ArrayList&lt;&gt;(</span>
-<span class="source-line-no">089</span><span id="line-89">                
getConvergenceErrorMsgs(dependencyVersionMap.getConflictedVersionNumbers(includes,
 excludes)));</span>
-<span class="source-line-no">090</span><span id="line-90">        for 
(CharSequence errorMsg : errorMsgs) {</span>
-<span class="source-line-no">091</span><span id="line-91">            
getLog().warnOrError(errorMsg);</span>
-<span class="source-line-no">092</span><span id="line-92">        }</span>
-<span class="source-line-no">093</span><span id="line-93">        if 
(errorMsgs.size() &gt; 0) {</span>
-<span class="source-line-no">094</span><span id="line-94">            throw 
new EnforcerRuleException(</span>
-<span class="source-line-no">095</span><span id="line-95">                    
"Failed while enforcing releasability. " + "See above detailed error 
message.");</span>
+<span class="source-line-no">065</span><span id="line-65">    @Override</span>
+<span class="source-line-no">066</span><span id="line-66">    public void 
execute() throws EnforcerRuleException {</span>
+<span class="source-line-no">067</span><span id="line-67"></span>
+<span class="source-line-no">068</span><span id="line-68">        
DependencyNode node = 
resolverUtil.resolveTransitiveDependenciesVerbose(excludedScopes);</span>
+<span class="source-line-no">069</span><span id="line-69">        
dependencyVersionMap = new 
DependencyVersionMap().setUniqueVersions(uniqueVersions);</span>
+<span class="source-line-no">070</span><span id="line-70">        
node.accept(dependencyVersionMap);</span>
+<span class="source-line-no">071</span><span id="line-71"></span>
+<span class="source-line-no">072</span><span id="line-72">        
List&lt;String&gt; errorMsgs =</span>
+<span class="source-line-no">073</span><span id="line-73">                
getConvergenceErrorMsgs(dependencyVersionMap.getConflictedVersionNumbers(includes,
 excludes));</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75">        if 
(!errorMsgs.isEmpty()) {</span>
+<span class="source-line-no">076</span><span id="line-76">            throw 
new EnforcerRuleException("Failed while enforcing releasability." + 
System.lineSeparator()</span>
+<span class="source-line-no">077</span><span id="line-77">                    
+ String.join(System.lineSeparator(), errorMsgs));</span>
+<span class="source-line-no">078</span><span id="line-78">        }</span>
+<span class="source-line-no">079</span><span id="line-79">    }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">    private 
StringBuilder buildTreeString(DependencyNode node) {</span>
+<span class="source-line-no">082</span><span id="line-82">        
List&lt;String&gt; loc = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">083</span><span id="line-83">        
DependencyNode currentNode = node;</span>
+<span class="source-line-no">084</span><span id="line-84">        while 
(currentNode != null) {</span>
+<span class="source-line-no">085</span><span id="line-85">            // 
ArtifactUtils.toArtifact(node) adds scope and optional information, if 
present</span>
+<span class="source-line-no">086</span><span id="line-86">            
loc.add(ArtifactUtils.toArtifact(currentNode).toString());</span>
+<span class="source-line-no">087</span><span id="line-87">            
currentNode = dependencyVersionMap.getParent(currentNode);</span>
+<span class="source-line-no">088</span><span id="line-88">        }</span>
+<span class="source-line-no">089</span><span id="line-89">        
Collections.reverse(loc);</span>
+<span class="source-line-no">090</span><span id="line-90">        
StringBuilder builder = new StringBuilder();</span>
+<span class="source-line-no">091</span><span id="line-91">        for (int i = 
0; i &lt; loc.size(); i++) {</span>
+<span class="source-line-no">092</span><span id="line-92">            for (int 
j = 0; j &lt; i; j++) {</span>
+<span class="source-line-no">093</span><span id="line-93">                
builder.append("  ");</span>
+<span class="source-line-no">094</span><span id="line-94">            }</span>
+<span class="source-line-no">095</span><span id="line-95">            
builder.append("+-").append(loc.get(i)).append(System.lineSeparator());</span>
 <span class="source-line-no">096</span><span id="line-96">        }</span>
-<span class="source-line-no">097</span><span id="line-97">    }</span>
-<span class="source-line-no">098</span><span id="line-98"></span>
-<span class="source-line-no">099</span><span id="line-99">    private 
StringBuilder buildTreeString(DependencyNode node) {</span>
-<span class="source-line-no">100</span><span id="line-100">        
List&lt;String&gt; loc = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">101</span><span id="line-101">        
DependencyNode currentNode = node;</span>
-<span class="source-line-no">102</span><span id="line-102">        while 
(currentNode != null) {</span>
-<span class="source-line-no">103</span><span id="line-103">            // 
ArtifactUtils.toArtifact(node) adds scope and optional information, if 
present</span>
-<span class="source-line-no">104</span><span id="line-104">            
loc.add(ArtifactUtils.toArtifact(currentNode).toString());</span>
-<span class="source-line-no">105</span><span id="line-105">            
currentNode = dependencyVersionMap.getParent(currentNode);</span>
-<span class="source-line-no">106</span><span id="line-106">        }</span>
-<span class="source-line-no">107</span><span id="line-107">        
Collections.reverse(loc);</span>
-<span class="source-line-no">108</span><span id="line-108">        
StringBuilder builder = new StringBuilder();</span>
-<span class="source-line-no">109</span><span id="line-109">        for (int i 
= 0; i &lt; loc.size(); i++) {</span>
-<span class="source-line-no">110</span><span id="line-110">            for 
(int j = 0; j &lt; i; j++) {</span>
-<span class="source-line-no">111</span><span id="line-111">                
builder.append("  ");</span>
-<span class="source-line-no">112</span><span id="line-112">            }</span>
-<span class="source-line-no">113</span><span id="line-113">            
builder.append("+-").append(loc.get(i)).append(System.lineSeparator());</span>
-<span class="source-line-no">114</span><span id="line-114">        }</span>
-<span class="source-line-no">115</span><span id="line-115">        return 
builder;</span>
-<span class="source-line-no">116</span><span id="line-116">    }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118">    private 
List&lt;String&gt; 
getConvergenceErrorMsgs(List&lt;List&lt;DependencyNode&gt;&gt; errors) {</span>
-<span class="source-line-no">119</span><span id="line-119">        
List&lt;String&gt; errorMsgs = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">120</span><span id="line-120">        for 
(List&lt;DependencyNode&gt; nodeList : errors) {</span>
-<span class="source-line-no">121</span><span id="line-121">            
errorMsgs.add(buildConvergenceErrorMsg(nodeList));</span>
-<span class="source-line-no">122</span><span id="line-122">        }</span>
-<span class="source-line-no">123</span><span id="line-123">        return 
errorMsgs;</span>
-<span class="source-line-no">124</span><span id="line-124">    }</span>
-<span class="source-line-no">125</span><span id="line-125"></span>
-<span class="source-line-no">126</span><span id="line-126">    private String 
buildConvergenceErrorMsg(List&lt;DependencyNode&gt; nodeList) {</span>
-<span class="source-line-no">127</span><span id="line-127">        
StringBuilder builder = new StringBuilder();</span>
-<span class="source-line-no">128</span><span id="line-128">        
builder.append(System.lineSeparator())</span>
-<span class="source-line-no">129</span><span id="line-129">                
.append("Dependency convergence error for ")</span>
-<span class="source-line-no">130</span><span id="line-130">                
.append(nodeList.get(0).getArtifact().toString())</span>
-<span class="source-line-no">131</span><span id="line-131">                
.append(" paths to dependency are:")</span>
-<span class="source-line-no">132</span><span id="line-132">                
.append(System.lineSeparator());</span>
-<span class="source-line-no">133</span><span id="line-133">        if 
(nodeList.size() &gt; 0) {</span>
-<span class="source-line-no">134</span><span id="line-134">            
builder.append(buildTreeString(nodeList.get(0)));</span>
-<span class="source-line-no">135</span><span id="line-135">        }</span>
-<span class="source-line-no">136</span><span id="line-136">        for 
(DependencyNode node : nodeList.subList(1, nodeList.size())) {</span>
-<span class="source-line-no">137</span><span id="line-137">            
builder.append("and").append(System.lineSeparator()).append(buildTreeString(node));</span>
-<span class="source-line-no">138</span><span id="line-138">        }</span>
-<span class="source-line-no">139</span><span id="line-139">        return 
builder.toString();</span>
-<span class="source-line-no">140</span><span id="line-140">    }</span>
-<span class="source-line-no">141</span><span id="line-141"></span>
-<span class="source-line-no">142</span><span id="line-142">    @Override</span>
-<span class="source-line-no">143</span><span id="line-143">    public String 
toString() {</span>
-<span class="source-line-no">144</span><span id="line-144">        return 
String.format(</span>
-<span class="source-line-no">145</span><span id="line-145">                
"DependencyConvergence[includes=%s, excludes=%s, uniqueVersions=%b]",</span>
-<span class="source-line-no">146</span><span id="line-146">                
includes, excludes, uniqueVersions);</span>
-<span class="source-line-no">147</span><span id="line-147">    }</span>
-<span class="source-line-no">148</span><span id="line-148">}</span>
+<span class="source-line-no">097</span><span id="line-97">        return 
builder;</span>
+<span class="source-line-no">098</span><span id="line-98">    }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100">    private 
List&lt;String&gt; 
getConvergenceErrorMsgs(List&lt;List&lt;DependencyNode&gt;&gt; errors) {</span>
+<span class="source-line-no">101</span><span id="line-101">        
List&lt;String&gt; errorMsgs = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">102</span><span id="line-102">        for 
(List&lt;DependencyNode&gt; nodeList : errors) {</span>
+<span class="source-line-no">103</span><span id="line-103">            
errorMsgs.add(buildConvergenceErrorMsg(nodeList));</span>
+<span class="source-line-no">104</span><span id="line-104">        }</span>
+<span class="source-line-no">105</span><span id="line-105">        return 
errorMsgs;</span>
+<span class="source-line-no">106</span><span id="line-106">    }</span>
+<span class="source-line-no">107</span><span id="line-107"></span>
+<span class="source-line-no">108</span><span id="line-108">    private String 
buildConvergenceErrorMsg(List&lt;DependencyNode&gt; nodeList) {</span>
+<span class="source-line-no">109</span><span id="line-109">        
StringBuilder builder = new StringBuilder();</span>
+<span class="source-line-no">110</span><span id="line-110">        
builder.append(System.lineSeparator())</span>
+<span class="source-line-no">111</span><span id="line-111">                
.append("Dependency convergence error for ")</span>
+<span class="source-line-no">112</span><span id="line-112">                
.append(nodeList.get(0).getArtifact().toString())</span>
+<span class="source-line-no">113</span><span id="line-113">                
.append(" paths to dependency are:")</span>
+<span class="source-line-no">114</span><span id="line-114">                
.append(System.lineSeparator());</span>
+<span class="source-line-no">115</span><span id="line-115">        if 
(nodeList.size() &gt; 0) {</span>
+<span class="source-line-no">116</span><span id="line-116">            
builder.append(buildTreeString(nodeList.get(0)));</span>
+<span class="source-line-no">117</span><span id="line-117">        }</span>
+<span class="source-line-no">118</span><span id="line-118">        for 
(DependencyNode node : nodeList.subList(1, nodeList.size())) {</span>
+<span class="source-line-no">119</span><span id="line-119">            
builder.append("and").append(System.lineSeparator()).append(buildTreeString(node));</span>
+<span class="source-line-no">120</span><span id="line-120">        }</span>
+<span class="source-line-no">121</span><span id="line-121">        return 
builder.toString();</span>
+<span class="source-line-no">122</span><span id="line-122">    }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124">    @Override</span>
+<span class="source-line-no">125</span><span id="line-125">    public String 
toString() {</span>
+<span class="source-line-no">126</span><span id="line-126">        return 
String.format(</span>
+<span class="source-line-no">127</span><span id="line-127">                
"DependencyConvergence[includes=%s, excludes=%s, uniqueVersions=%b]",</span>
+<span class="source-line-no">128</span><span id="line-128">                
includes, excludes, uniqueVersions);</span>
+<span class="source-line-no">129</span><span id="line-129">    }</span>
+<span class="source-line-no">130</span><span id="line-130">}</span>
 
 
 

Modified: 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.html
==============================================================================
--- 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.html
 (original)
+++ 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.html
 Sat Apr  1 21:10:25 2023
@@ -64,8 +64,8 @@
 <span class="source-line-no">051</span><span id="line-51">    private boolean 
failWhenParentIsSnapshot = true;</span>
 <span class="source-line-no">052</span><span id="line-52"></span>
 <span class="source-line-no">053</span><span id="line-53">    @Inject</span>
-<span class="source-line-no">054</span><span id="line-54">    public 
RequireReleaseDeps(MavenSession session, ResolveUtil resolveUtil) {</span>
-<span class="source-line-no">055</span><span id="line-55">        
super(session, resolveUtil);</span>
+<span class="source-line-no">054</span><span id="line-54">    public 
RequireReleaseDeps(MavenSession session, ResolverUtil resolverUtil) {</span>
+<span class="source-line-no">055</span><span id="line-55">        
super(session, resolverUtil);</span>
 <span class="source-line-no">056</span><span id="line-56">    }</span>
 <span class="source-line-no">057</span><span id="line-57"></span>
 <span class="source-line-no">058</span><span id="line-58">    // Override 
parent to allow optional ignore of this rule.</span>

Modified: 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.html
==============================================================================
--- 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.html
 (original)
+++ 
maven/website/components/enforcer-archives/enforcer-LATEST/apidocs/src-html/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.html
 Sat Apr  1 21:10:25 2023
@@ -35,299 +35,309 @@
 <span class="source-line-no">022</span><span id="line-22">import 
javax.inject.Named;</span>
 <span class="source-line-no">023</span><span id="line-23"></span>
 <span class="source-line-no">024</span><span id="line-24">import 
java.util.ArrayList;</span>
-<span class="source-line-no">025</span><span id="line-25">import 
java.util.Collections;</span>
-<span class="source-line-no">026</span><span id="line-26">import 
java.util.HashMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import 
java.util.List;</span>
-<span class="source-line-no">028</span><span id="line-28">import 
java.util.Map;</span>
-<span class="source-line-no">029</span><span id="line-29">import 
java.util.Objects;</span>
-<span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import 
org.apache.maven.artifact.Artifact;</span>
-<span class="source-line-no">032</span><span id="line-32">import 
org.apache.maven.artifact.versioning.ArtifactVersion;</span>
-<span class="source-line-no">033</span><span id="line-33">import 
org.apache.maven.artifact.versioning.DefaultArtifactVersion;</span>
-<span class="source-line-no">034</span><span id="line-34">import 
org.apache.maven.artifact.versioning.OverConstrainedVersionException;</span>
-<span class="source-line-no">035</span><span id="line-35">import 
org.apache.maven.enforcer.rule.api.EnforcerRuleException;</span>
-<span class="source-line-no">036</span><span id="line-36">import 
org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;</span>
-<span class="source-line-no">037</span><span id="line-37">import 
org.apache.maven.enforcer.rules.utils.ArtifactUtils;</span>
-<span class="source-line-no">038</span><span id="line-38">import 
org.apache.maven.enforcer.rules.utils.ParentNodeProvider;</span>
-<span class="source-line-no">039</span><span id="line-39">import 
org.apache.maven.enforcer.rules.utils.ParentsVisitor;</span>
-<span class="source-line-no">040</span><span id="line-40">import 
org.eclipse.aether.graph.DependencyNode;</span>
-<span class="source-line-no">041</span><span id="line-41">import 
org.eclipse.aether.graph.DependencyVisitor;</span>
-<span class="source-line-no">042</span><span id="line-42">import 
org.eclipse.aether.util.graph.manager.DependencyManagerUtils;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">/**</span>
-<span class="source-line-no">045</span><span id="line-45"> * Rule to enforce 
that the resolved dependency is also the most recent one of all transitive 
dependencies.</span>
-<span class="source-line-no">046</span><span id="line-46"> *</span>
-<span class="source-line-no">047</span><span id="line-47"> * @author Geoffrey 
De Smet</span>
-<span class="source-line-no">048</span><span id="line-48"> * @since 1.1</span>
-<span class="source-line-no">049</span><span id="line-49"> */</span>
-<span class="source-line-no">050</span><span 
id="line-50">@Named("requireUpperBoundDeps")</span>
-<span class="source-line-no">051</span><span id="line-51">public final class 
RequireUpperBoundDeps extends AbstractStandardEnforcerRule {</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">    /**</span>
-<span class="source-line-no">054</span><span id="line-54">     * @since 
1.3</span>
-<span class="source-line-no">055</span><span id="line-55">     */</span>
-<span class="source-line-no">056</span><span id="line-56">    private boolean 
uniqueVersions;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">    /**</span>
-<span class="source-line-no">059</span><span id="line-59">     * Dependencies 
to ignore.</span>
-<span class="source-line-no">060</span><span id="line-60">     *</span>
-<span class="source-line-no">061</span><span id="line-61">     * @since 
TBD</span>
-<span class="source-line-no">062</span><span id="line-62">     */</span>
-<span class="source-line-no">063</span><span id="line-63">    private 
List&lt;String&gt; excludes = null;</span>
-<span class="source-line-no">064</span><span id="line-64"></span>
-<span class="source-line-no">065</span><span id="line-65">    /**</span>
-<span class="source-line-no">066</span><span id="line-66">     * Dependencies 
to include.</span>
-<span class="source-line-no">067</span><span id="line-67">     *</span>
-<span class="source-line-no">068</span><span id="line-68">     * @since 
3.0.0</span>
-<span class="source-line-no">069</span><span id="line-69">     */</span>
-<span class="source-line-no">070</span><span id="line-70">    private 
List&lt;String&gt; includes = null;</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72">    private 
RequireUpperBoundDepsVisitor upperBoundDepsVisitor;</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74">    private final 
ResolveUtil resolveUtil;</span>
+<span class="source-line-no">025</span><span id="line-25">import 
java.util.Arrays;</span>
+<span class="source-line-no">026</span><span id="line-26">import 
java.util.Collections;</span>
+<span class="source-line-no">027</span><span id="line-27">import 
java.util.HashMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import 
java.util.List;</span>
+<span class="source-line-no">029</span><span id="line-29">import 
java.util.Map;</span>
+<span class="source-line-no">030</span><span id="line-30">import 
java.util.Objects;</span>
+<span class="source-line-no">031</span><span id="line-31"></span>
+<span class="source-line-no">032</span><span id="line-32">import 
org.apache.maven.artifact.Artifact;</span>
+<span class="source-line-no">033</span><span id="line-33">import 
org.apache.maven.artifact.versioning.ArtifactVersion;</span>
+<span class="source-line-no">034</span><span id="line-34">import 
org.apache.maven.artifact.versioning.DefaultArtifactVersion;</span>
+<span class="source-line-no">035</span><span id="line-35">import 
org.apache.maven.artifact.versioning.OverConstrainedVersionException;</span>
+<span class="source-line-no">036</span><span id="line-36">import 
org.apache.maven.enforcer.rule.api.EnforcerRuleException;</span>
+<span class="source-line-no">037</span><span id="line-37">import 
org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;</span>
+<span class="source-line-no">038</span><span id="line-38">import 
org.apache.maven.enforcer.rules.utils.ArtifactUtils;</span>
+<span class="source-line-no">039</span><span id="line-39">import 
org.apache.maven.enforcer.rules.utils.ParentNodeProvider;</span>
+<span class="source-line-no">040</span><span id="line-40">import 
org.apache.maven.enforcer.rules.utils.ParentsVisitor;</span>
+<span class="source-line-no">041</span><span id="line-41">import 
org.eclipse.aether.graph.DependencyNode;</span>
+<span class="source-line-no">042</span><span id="line-42">import 
org.eclipse.aether.graph.DependencyVisitor;</span>
+<span class="source-line-no">043</span><span id="line-43">import 
org.eclipse.aether.util.graph.manager.DependencyManagerUtils;</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45">import static 
org.apache.maven.artifact.Artifact.SCOPE_PROVIDED;</span>
+<span class="source-line-no">046</span><span id="line-46">import static 
org.apache.maven.artifact.Artifact.SCOPE_TEST;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Rule to enforce 
that the resolved dependency is also the most recent one of all transitive 
dependencies.</span>
+<span class="source-line-no">050</span><span id="line-50"> *</span>
+<span class="source-line-no">051</span><span id="line-51"> * @author Geoffrey 
De Smet</span>
+<span class="source-line-no">052</span><span id="line-52"> * @since 1.1</span>
+<span class="source-line-no">053</span><span id="line-53"> */</span>
+<span class="source-line-no">054</span><span 
id="line-54">@Named("requireUpperBoundDeps")</span>
+<span class="source-line-no">055</span><span id="line-55">public final class 
RequireUpperBoundDeps extends AbstractStandardEnforcerRule {</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">    /**</span>
+<span class="source-line-no">058</span><span id="line-58">     * @since 
1.3</span>
+<span class="source-line-no">059</span><span id="line-59">     */</span>
+<span class="source-line-no">060</span><span id="line-60">    private boolean 
uniqueVersions;</span>
+<span class="source-line-no">061</span><span id="line-61"></span>
+<span class="source-line-no">062</span><span id="line-62">    /**</span>
+<span class="source-line-no">063</span><span id="line-63">     * Dependencies 
to ignore.</span>
+<span class="source-line-no">064</span><span id="line-64">     *</span>
+<span class="source-line-no">065</span><span id="line-65">     * @since 
TBD</span>
+<span class="source-line-no">066</span><span id="line-66">     */</span>
+<span class="source-line-no">067</span><span id="line-67">    private 
List&lt;String&gt; excludes = null;</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69">    /**</span>
+<span class="source-line-no">070</span><span id="line-70">     * Dependencies 
to include.</span>
+<span class="source-line-no">071</span><span id="line-71">     *</span>
+<span class="source-line-no">072</span><span id="line-72">     * @since 
3.0.0</span>
+<span class="source-line-no">073</span><span id="line-73">     */</span>
+<span class="source-line-no">074</span><span id="line-74">    private 
List&lt;String&gt; includes = null;</span>
 <span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76">    @Inject</span>
-<span class="source-line-no">077</span><span id="line-77">    public 
RequireUpperBoundDeps(ResolveUtil resolveUtil) {</span>
-<span class="source-line-no">078</span><span id="line-78">        
this.resolveUtil = Objects.requireNonNull(resolveUtil);</span>
-<span class="source-line-no">079</span><span id="line-79">    }</span>
+<span class="source-line-no">076</span><span id="line-76">    /**</span>
+<span class="source-line-no">077</span><span id="line-77">     * Scope to 
exclude.</span>
+<span class="source-line-no">078</span><span id="line-78">     */</span>
+<span class="source-line-no">079</span><span id="line-79">    private 
List&lt;String&gt; excludedScopes = Arrays.asList(SCOPE_TEST, 
SCOPE_PROVIDED);</span>
 <span class="source-line-no">080</span><span id="line-80"></span>
-<span class="source-line-no">081</span><span id="line-81">    /**</span>
-<span class="source-line-no">082</span><span id="line-82">     * Sets 
dependencies to exclude.</span>
-<span class="source-line-no">083</span><span id="line-83">     * @param 
excludes a list of {@code groupId:artifactId} names</span>
-<span class="source-line-no">084</span><span id="line-84">     */</span>
-<span class="source-line-no">085</span><span id="line-85">    public void 
setExcludes(List&lt;String&gt; excludes) {</span>
-<span class="source-line-no">086</span><span id="line-86">        
this.excludes = excludes;</span>
-<span class="source-line-no">087</span><span id="line-87">    }</span>
-<span class="source-line-no">088</span><span id="line-88"></span>
-<span class="source-line-no">089</span><span id="line-89">    /**</span>
-<span class="source-line-no">090</span><span id="line-90">     * Sets 
dependencies to include.</span>
-<span class="source-line-no">091</span><span id="line-91">     *</span>
-<span class="source-line-no">092</span><span id="line-92">     * @param 
includes a list of {@code groupId:artifactId} names</span>
+<span class="source-line-no">081</span><span id="line-81">    private 
RequireUpperBoundDepsVisitor upperBoundDepsVisitor;</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">    private final 
ResolverUtil resolverUtil;</span>
+<span class="source-line-no">084</span><span id="line-84"></span>
+<span class="source-line-no">085</span><span id="line-85">    @Inject</span>
+<span class="source-line-no">086</span><span id="line-86">    public 
RequireUpperBoundDeps(ResolverUtil resolverUtil) {</span>
+<span class="source-line-no">087</span><span id="line-87">        
this.resolverUtil = Objects.requireNonNull(resolverUtil);</span>
+<span class="source-line-no">088</span><span id="line-88">    }</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90">    /**</span>
+<span class="source-line-no">091</span><span id="line-91">     * Sets 
dependencies to exclude.</span>
+<span class="source-line-no">092</span><span id="line-92">     * @param 
excludes a list of {@code groupId:artifactId} names</span>
 <span class="source-line-no">093</span><span id="line-93">     */</span>
-<span class="source-line-no">094</span><span id="line-94">    public void 
setIncludes(List&lt;String&gt; includes) {</span>
-<span class="source-line-no">095</span><span id="line-95">        
this.includes = includes;</span>
+<span class="source-line-no">094</span><span id="line-94">    public void 
setExcludes(List&lt;String&gt; excludes) {</span>
+<span class="source-line-no">095</span><span id="line-95">        
this.excludes = excludes;</span>
 <span class="source-line-no">096</span><span id="line-96">    }</span>
 <span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">    @Override</span>
-<span class="source-line-no">099</span><span id="line-99">    public void 
execute() throws EnforcerRuleException {</span>
-<span class="source-line-no">100</span><span id="line-100">        
DependencyNode node = resolveUtil.resolveTransitiveDependencies();</span>
-<span class="source-line-no">101</span><span id="line-101">        
upperBoundDepsVisitor = new RequireUpperBoundDepsVisitor()</span>
-<span class="source-line-no">102</span><span id="line-102">                
.setUniqueVersions(uniqueVersions)</span>
-<span class="source-line-no">103</span><span id="line-103">                
.setIncludes(includes);</span>
-<span class="source-line-no">104</span><span id="line-104">        
node.accept(upperBoundDepsVisitor);</span>
-<span class="source-line-no">105</span><span id="line-105">        
List&lt;String&gt; errorMessages = 
buildErrorMessages(upperBoundDepsVisitor.getConflicts());</span>
-<span class="source-line-no">106</span><span id="line-106">        if 
(errorMessages.size() &gt; 0) {</span>
-<span class="source-line-no">107</span><span id="line-107">            throw 
new EnforcerRuleException(</span>
-<span class="source-line-no">108</span><span id="line-108">                    
"Failed while enforcing RequireUpperBoundDeps. The error(s) are " + 
errorMessages);</span>
-<span class="source-line-no">109</span><span id="line-109">        }</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    private 
List&lt;String&gt; buildErrorMessages(List&lt;List&lt;DependencyNode&gt;&gt; 
conflicts) {</span>
-<span class="source-line-no">113</span><span id="line-113">        
List&lt;String&gt; errorMessages = new 
ArrayList&lt;&gt;(conflicts.size());</span>
-<span class="source-line-no">114</span><span id="line-114">        for 
(List&lt;DependencyNode&gt; conflict : conflicts) {</span>
-<span class="source-line-no">115</span><span id="line-115">            
org.eclipse.aether.artifact.Artifact artifact = 
conflict.get(0).getArtifact();</span>
-<span class="source-line-no">116</span><span id="line-116">            String 
groupArt = artifact.getGroupId() + ":" + artifact.getArtifactId();</span>
-<span class="source-line-no">117</span><span id="line-117">            if 
(excludes != null &amp;&amp; excludes.contains(groupArt)) {</span>
-<span class="source-line-no">118</span><span id="line-118">                
getLog().info("Ignoring requireUpperBoundDeps in " + groupArt);</span>
-<span class="source-line-no">119</span><span id="line-119">            } else 
{</span>
-<span class="source-line-no">120</span><span id="line-120">                
errorMessages.add(buildErrorMessage(conflict));</span>
-<span class="source-line-no">121</span><span id="line-121">            }</span>
-<span class="source-line-no">122</span><span id="line-122">        }</span>
-<span class="source-line-no">123</span><span id="line-123">        return 
errorMessages;</span>
-<span class="source-line-no">124</span><span id="line-124">    }</span>
-<span class="source-line-no">125</span><span id="line-125"></span>
-<span class="source-line-no">126</span><span id="line-126">    private String 
buildErrorMessage(List&lt;DependencyNode&gt; conflict) {</span>
-<span class="source-line-no">127</span><span id="line-127">        
StringBuilder errorMessage = new StringBuilder();</span>
-<span class="source-line-no">128</span><span id="line-128">        
errorMessage</span>
-<span class="source-line-no">129</span><span id="line-129">                
.append(System.lineSeparator())</span>
-<span class="source-line-no">130</span><span id="line-130">                
.append("Require upper bound dependencies error for ")</span>
-<span class="source-line-no">131</span><span id="line-131">                
.append(getFullArtifactName(conflict.get(0), false))</span>
-<span class="source-line-no">132</span><span id="line-132">                
.append(" paths to dependency are:")</span>
-<span class="source-line-no">133</span><span id="line-133">                
.append(System.lineSeparator());</span>
-<span class="source-line-no">134</span><span id="line-134">        if 
(conflict.size() &gt; 0) {</span>
-<span class="source-line-no">135</span><span id="line-135">            
errorMessage.append(buildTreeString(conflict.get(0)));</span>
-<span class="source-line-no">136</span><span id="line-136">        }</span>
-<span class="source-line-no">137</span><span id="line-137">        for 
(DependencyNode node : conflict.subList(1, conflict.size())) {</span>
-<span class="source-line-no">138</span><span id="line-138">            
errorMessage.append("and").append(System.lineSeparator());</span>
-<span class="source-line-no">139</span><span id="line-139">            
errorMessage.append(buildTreeString(node));</span>
-<span class="source-line-no">140</span><span id="line-140">        }</span>
-<span class="source-line-no">141</span><span id="line-141">        return 
errorMessage.toString();</span>
-<span class="source-line-no">142</span><span id="line-142">    }</span>
-<span class="source-line-no">143</span><span id="line-143"></span>
-<span class="source-line-no">144</span><span id="line-144">    private 
StringBuilder buildTreeString(DependencyNode node) {</span>
-<span class="source-line-no">145</span><span id="line-145">        
List&lt;String&gt; loc = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">146</span><span id="line-146">        
DependencyNode currentNode = node;</span>
-<span class="source-line-no">147</span><span id="line-147">        while 
(currentNode != null) {</span>
-<span class="source-line-no">148</span><span id="line-148">            
StringBuilder line = new StringBuilder(getFullArtifactName(currentNode, 
false));</span>
-<span class="source-line-no">149</span><span id="line-149"></span>
-<span class="source-line-no">150</span><span id="line-150">            if 
(DependencyManagerUtils.getPremanagedVersion(currentNode) != null) {</span>
-<span class="source-line-no">151</span><span id="line-151">                
line.append(" (managed) &lt;-- ");</span>
-<span class="source-line-no">152</span><span id="line-152">                
line.append(getFullArtifactName(currentNode, true));</span>
-<span class="source-line-no">153</span><span id="line-153">            }</span>
-<span class="source-line-no">154</span><span id="line-154"></span>
-<span class="source-line-no">155</span><span id="line-155">            
loc.add(line.toString());</span>
-<span class="source-line-no">156</span><span id="line-156">            
currentNode = upperBoundDepsVisitor.getParent(currentNode);</span>
-<span class="source-line-no">157</span><span id="line-157">        }</span>
-<span class="source-line-no">158</span><span id="line-158">        
Collections.reverse(loc);</span>
-<span class="source-line-no">159</span><span id="line-159">        
StringBuilder builder = new StringBuilder();</span>
-<span class="source-line-no">160</span><span id="line-160">        for (int i 
= 0; i &lt; loc.size(); i++) {</span>
-<span class="source-line-no">161</span><span id="line-161">            for 
(int j = 0; j &lt; i; j++) {</span>
-<span class="source-line-no">162</span><span id="line-162">                
builder.append("  ");</span>
+<span class="source-line-no">098</span><span id="line-98">    /**</span>
+<span class="source-line-no">099</span><span id="line-99">     * Sets 
dependencies to include.</span>
+<span class="source-line-no">100</span><span id="line-100">     *</span>
+<span class="source-line-no">101</span><span id="line-101">     * @param 
includes a list of {@code groupId:artifactId} names</span>
+<span class="source-line-no">102</span><span id="line-102">     */</span>
+<span class="source-line-no">103</span><span id="line-103">    public void 
setIncludes(List&lt;String&gt; includes) {</span>
+<span class="source-line-no">104</span><span id="line-104">        
this.includes = includes;</span>
+<span class="source-line-no">105</span><span id="line-105">    }</span>
+<span class="source-line-no">106</span><span id="line-106"></span>
+<span class="source-line-no">107</span><span id="line-107">    @Override</span>
+<span class="source-line-no">108</span><span id="line-108">    public void 
execute() throws EnforcerRuleException {</span>
+<span class="source-line-no">109</span><span id="line-109">        
DependencyNode node = 
resolverUtil.resolveTransitiveDependenciesVerbose(excludedScopes);</span>
+<span class="source-line-no">110</span><span id="line-110">        
upperBoundDepsVisitor = new RequireUpperBoundDepsVisitor()</span>
+<span class="source-line-no">111</span><span id="line-111">                
.setUniqueVersions(uniqueVersions)</span>
+<span class="source-line-no">112</span><span id="line-112">                
.setIncludes(includes);</span>
+<span class="source-line-no">113</span><span id="line-113">        
getLog().debug(() -&gt; resolverUtil.dumpTree(node));</span>
+<span class="source-line-no">114</span><span id="line-114">        
node.accept(upperBoundDepsVisitor);</span>
+<span class="source-line-no">115</span><span id="line-115">        
List&lt;String&gt; errorMessages = 
buildErrorMessages(upperBoundDepsVisitor.getConflicts());</span>
+<span class="source-line-no">116</span><span id="line-116">        if 
(!errorMessages.isEmpty()) {</span>
+<span class="source-line-no">117</span><span id="line-117">            throw 
new EnforcerRuleException(</span>
+<span class="source-line-no">118</span><span id="line-118">                    
"Failed while enforcing RequireUpperBoundDeps. The error(s) are " + 
errorMessages);</span>
+<span class="source-line-no">119</span><span id="line-119">        }</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    private 
List&lt;String&gt; buildErrorMessages(List&lt;List&lt;DependencyNode&gt;&gt; 
conflicts) {</span>
+<span class="source-line-no">123</span><span id="line-123">        
List&lt;String&gt; errorMessages = new 
ArrayList&lt;&gt;(conflicts.size());</span>
+<span class="source-line-no">124</span><span id="line-124">        for 
(List&lt;DependencyNode&gt; conflict : conflicts) {</span>
+<span class="source-line-no">125</span><span id="line-125">            
org.eclipse.aether.artifact.Artifact artifact = 
conflict.get(0).getArtifact();</span>
+<span class="source-line-no">126</span><span id="line-126">            String 
groupArt = artifact.getGroupId() + ":" + artifact.getArtifactId();</span>
+<span class="source-line-no">127</span><span id="line-127">            if 
(excludes != null &amp;&amp; excludes.contains(groupArt)) {</span>
+<span class="source-line-no">128</span><span id="line-128">                
getLog().info("Ignoring requireUpperBoundDeps in " + groupArt);</span>
+<span class="source-line-no">129</span><span id="line-129">            } else 
{</span>
+<span class="source-line-no">130</span><span id="line-130">                
errorMessages.add(buildErrorMessage(conflict));</span>
+<span class="source-line-no">131</span><span id="line-131">            }</span>
+<span class="source-line-no">132</span><span id="line-132">        }</span>
+<span class="source-line-no">133</span><span id="line-133">        return 
errorMessages;</span>
+<span class="source-line-no">134</span><span id="line-134">    }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">    private String 
buildErrorMessage(List&lt;DependencyNode&gt; conflict) {</span>
+<span class="source-line-no">137</span><span id="line-137">        
StringBuilder errorMessage = new StringBuilder();</span>
+<span class="source-line-no">138</span><span id="line-138">        
errorMessage</span>
+<span class="source-line-no">139</span><span id="line-139">                
.append(System.lineSeparator())</span>
+<span class="source-line-no">140</span><span id="line-140">                
.append("Require upper bound dependencies error for ")</span>
+<span class="source-line-no">141</span><span id="line-141">                
.append(getFullArtifactName(conflict.get(0), false))</span>
+<span class="source-line-no">142</span><span id="line-142">                
.append(" paths to dependency are:")</span>
+<span class="source-line-no">143</span><span id="line-143">                
.append(System.lineSeparator());</span>
+<span class="source-line-no">144</span><span id="line-144">        if 
(conflict.size() &gt; 0) {</span>
+<span class="source-line-no">145</span><span id="line-145">            
errorMessage.append(buildTreeString(conflict.get(0)));</span>
+<span class="source-line-no">146</span><span id="line-146">        }</span>
+<span class="source-line-no">147</span><span id="line-147">        for 
(DependencyNode node : conflict.subList(1, conflict.size())) {</span>
+<span class="source-line-no">148</span><span id="line-148">            
errorMessage.append("and").append(System.lineSeparator());</span>
+<span class="source-line-no">149</span><span id="line-149">            
errorMessage.append(buildTreeString(node));</span>
+<span class="source-line-no">150</span><span id="line-150">        }</span>
+<span class="source-line-no">151</span><span id="line-151">        return 
errorMessage.toString();</span>
+<span class="source-line-no">152</span><span id="line-152">    }</span>
+<span class="source-line-no">153</span><span id="line-153"></span>
+<span class="source-line-no">154</span><span id="line-154">    private 
StringBuilder buildTreeString(DependencyNode node) {</span>
+<span class="source-line-no">155</span><span id="line-155">        
List&lt;String&gt; loc = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">156</span><span id="line-156">        
DependencyNode currentNode = node;</span>
+<span class="source-line-no">157</span><span id="line-157">        while 
(currentNode != null) {</span>
+<span class="source-line-no">158</span><span id="line-158">            
StringBuilder line = new StringBuilder(getFullArtifactName(currentNode, 
false));</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">            if 
(DependencyManagerUtils.getPremanagedVersion(currentNode) != null) {</span>
+<span class="source-line-no">161</span><span id="line-161">                
line.append(" (managed) &lt;-- ");</span>
+<span class="source-line-no">162</span><span id="line-162">                
line.append(getFullArtifactName(currentNode, true));</span>
 <span class="source-line-no">163</span><span id="line-163">            }</span>
-<span class="source-line-no">164</span><span id="line-164">            
builder.append("+-").append(loc.get(i));</span>
-<span class="source-line-no">165</span><span id="line-165">            
builder.append(System.lineSeparator());</span>
-<span class="source-line-no">166</span><span id="line-166">        }</span>
-<span class="source-line-no">167</span><span id="line-167">        return 
builder;</span>
-<span class="source-line-no">168</span><span id="line-168">    }</span>
-<span class="source-line-no">169</span><span id="line-169"></span>
-<span class="source-line-no">170</span><span id="line-170">    private String 
getFullArtifactName(DependencyNode node, boolean usePremanaged) {</span>
-<span class="source-line-no">171</span><span id="line-171">        Artifact 
artifact = ArtifactUtils.toArtifact(node);</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173">        String 
version = DependencyManagerUtils.getPremanagedVersion(node);</span>
-<span class="source-line-no">174</span><span id="line-174">        if 
(!usePremanaged || version == null) {</span>
-<span class="source-line-no">175</span><span id="line-175">            version 
= uniqueVersions ? artifact.getVersion() : artifact.getBaseVersion();</span>
+<span class="source-line-no">164</span><span id="line-164"></span>
+<span class="source-line-no">165</span><span id="line-165">            
loc.add(line.toString());</span>
+<span class="source-line-no">166</span><span id="line-166">            
currentNode = upperBoundDepsVisitor.getParent(currentNode);</span>
+<span class="source-line-no">167</span><span id="line-167">        }</span>
+<span class="source-line-no">168</span><span id="line-168">        
Collections.reverse(loc);</span>
+<span class="source-line-no">169</span><span id="line-169">        
StringBuilder builder = new StringBuilder();</span>
+<span class="source-line-no">170</span><span id="line-170">        for (int i 
= 0; i &lt; loc.size(); i++) {</span>
+<span class="source-line-no">171</span><span id="line-171">            for 
(int j = 0; j &lt; i; j++) {</span>
+<span class="source-line-no">172</span><span id="line-172">                
builder.append("  ");</span>
+<span class="source-line-no">173</span><span id="line-173">            }</span>
+<span class="source-line-no">174</span><span id="line-174">            
builder.append("+-").append(loc.get(i));</span>
+<span class="source-line-no">175</span><span id="line-175">            
builder.append(System.lineSeparator());</span>
 <span class="source-line-no">176</span><span id="line-176">        }</span>
-<span class="source-line-no">177</span><span id="line-177">        String 
result = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + 
version;</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179">        String 
classifier = artifact.getClassifier();</span>
-<span class="source-line-no">180</span><span id="line-180">        if 
(classifier != null &amp;&amp; !classifier.isEmpty()) {</span>
-<span class="source-line-no">181</span><span id="line-181">            result 
+= ":" + classifier;</span>
-<span class="source-line-no">182</span><span id="line-182">        }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">        String 
scope = artifact.getScope();</span>
-<span class="source-line-no">185</span><span id="line-185">        if (scope 
!= null &amp;&amp; !"compile".equals(scope)) {</span>
-<span class="source-line-no">186</span><span id="line-186">            result 
+= " [" + scope + ']';</span>
-<span class="source-line-no">187</span><span id="line-187">        }</span>
+<span class="source-line-no">177</span><span id="line-177">        return 
builder;</span>
+<span class="source-line-no">178</span><span id="line-178">    }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180">    private String 
getFullArtifactName(DependencyNode node, boolean usePremanaged) {</span>
+<span class="source-line-no">181</span><span id="line-181">        Artifact 
artifact = ArtifactUtils.toArtifact(node);</span>
+<span class="source-line-no">182</span><span id="line-182"></span>
+<span class="source-line-no">183</span><span id="line-183">        String 
version = DependencyManagerUtils.getPremanagedVersion(node);</span>
+<span class="source-line-no">184</span><span id="line-184">        if 
(!usePremanaged || version == null) {</span>
+<span class="source-line-no">185</span><span id="line-185">            version 
= uniqueVersions ? artifact.getVersion() : artifact.getBaseVersion();</span>
+<span class="source-line-no">186</span><span id="line-186">        }</span>
+<span class="source-line-no">187</span><span id="line-187">        String 
result = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + 
version;</span>
 <span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189">        return 
result;</span>
-<span class="source-line-no">190</span><span id="line-190">    }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192">    private static 
class RequireUpperBoundDepsVisitor implements DependencyVisitor, 
ParentNodeProvider {</span>
+<span class="source-line-no">189</span><span id="line-189">        String 
classifier = artifact.getClassifier();</span>
+<span class="source-line-no">190</span><span id="line-190">        if 
(classifier != null &amp;&amp; !classifier.isEmpty()) {</span>
+<span class="source-line-no">191</span><span id="line-191">            result 
+= ":" + classifier;</span>
+<span class="source-line-no">192</span><span id="line-192">        }</span>
 <span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194">        private 
final ParentsVisitor parentsVisitor = new ParentsVisitor();</span>
-<span class="source-line-no">195</span><span id="line-195">        private 
boolean uniqueVersions;</span>
-<span class="source-line-no">196</span><span id="line-196">        private 
List&lt;String&gt; includes = null;</span>
-<span class="source-line-no">197</span><span id="line-197"></span>
-<span class="source-line-no">198</span><span id="line-198">        public 
RequireUpperBoundDepsVisitor setUniqueVersions(boolean uniqueVersions) {</span>
-<span class="source-line-no">199</span><span id="line-199">            
this.uniqueVersions = uniqueVersions;</span>
-<span class="source-line-no">200</span><span id="line-200">            return 
this;</span>
-<span class="source-line-no">201</span><span id="line-201">        }</span>
-<span class="source-line-no">202</span><span id="line-202"></span>
-<span class="source-line-no">203</span><span id="line-203">        public 
RequireUpperBoundDepsVisitor setIncludes(List&lt;String&gt; includes) {</span>
-<span class="source-line-no">204</span><span id="line-204">            
this.includes = includes;</span>
-<span class="source-line-no">205</span><span id="line-205">            return 
this;</span>
-<span class="source-line-no">206</span><span id="line-206">        }</span>
+<span class="source-line-no">194</span><span id="line-194">        String 
scope = artifact.getScope();</span>
+<span class="source-line-no">195</span><span id="line-195">        if (scope 
!= null &amp;&amp; !"compile".equals(scope)) {</span>
+<span class="source-line-no">196</span><span id="line-196">            result 
+= " [" + scope + ']';</span>
+<span class="source-line-no">197</span><span id="line-197">        }</span>
+<span class="source-line-no">198</span><span id="line-198"></span>
+<span class="source-line-no">199</span><span id="line-199">        return 
result;</span>
+<span class="source-line-no">200</span><span id="line-200">    }</span>
+<span class="source-line-no">201</span><span id="line-201"></span>
+<span class="source-line-no">202</span><span id="line-202">    private static 
class RequireUpperBoundDepsVisitor implements DependencyVisitor, 
ParentNodeProvider {</span>
+<span class="source-line-no">203</span><span id="line-203"></span>
+<span class="source-line-no">204</span><span id="line-204">        private 
final ParentsVisitor parentsVisitor = new ParentsVisitor();</span>
+<span class="source-line-no">205</span><span id="line-205">        private 
boolean uniqueVersions;</span>
+<span class="source-line-no">206</span><span id="line-206">        private 
List&lt;String&gt; includes = null;</span>
 <span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208">        private 
final Map&lt;String, List&lt;DependencyNodeHopCountPair&gt;&gt; keyToPairsMap = 
new HashMap&lt;&gt;();</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210">        
@Override</span>
-<span class="source-line-no">211</span><span id="line-211">        public 
boolean visitEnter(DependencyNode node) {</span>
-<span class="source-line-no">212</span><span id="line-212">            
parentsVisitor.visitEnter(node);</span>
-<span class="source-line-no">213</span><span id="line-213">            
DependencyNodeHopCountPair pair = new DependencyNodeHopCountPair(node, 
this);</span>
-<span class="source-line-no">214</span><span id="line-214">            String 
key = pair.constructKey();</span>
-<span class="source-line-no">215</span><span id="line-215"></span>
-<span class="source-line-no">216</span><span id="line-216">            if 
(includes != null &amp;&amp; !includes.isEmpty() &amp;&amp; 
!includes.contains(key)) {</span>
-<span class="source-line-no">217</span><span id="line-217">                
return true;</span>
-<span class="source-line-no">218</span><span id="line-218">            }</span>
+<span class="source-line-no">208</span><span id="line-208">        public 
RequireUpperBoundDepsVisitor setUniqueVersions(boolean uniqueVersions) {</span>
+<span class="source-line-no">209</span><span id="line-209">            
this.uniqueVersions = uniqueVersions;</span>
+<span class="source-line-no">210</span><span id="line-210">            return 
this;</span>
+<span class="source-line-no">211</span><span id="line-211">        }</span>
+<span class="source-line-no">212</span><span id="line-212"></span>
+<span class="source-line-no">213</span><span id="line-213">        public 
RequireUpperBoundDepsVisitor setIncludes(List&lt;String&gt; includes) {</span>
+<span class="source-line-no">214</span><span id="line-214">            
this.includes = includes;</span>
+<span class="source-line-no">215</span><span id="line-215">            return 
this;</span>
+<span class="source-line-no">216</span><span id="line-216">        }</span>
+<span class="source-line-no">217</span><span id="line-217"></span>
+<span class="source-line-no">218</span><span id="line-218">        private 
final Map&lt;String, List&lt;DependencyNodeHopCountPair&gt;&gt; keyToPairsMap = 
new HashMap&lt;&gt;();</span>
 <span class="source-line-no">219</span><span id="line-219"></span>
-<span class="source-line-no">220</span><span id="line-220">            
keyToPairsMap.computeIfAbsent(key, k1 -&gt; new 
ArrayList&lt;&gt;()).add(pair);</span>
-<span class="source-line-no">221</span><span id="line-221">            
keyToPairsMap.get(key).sort(DependencyNodeHopCountPair::compareTo);</span>
-<span class="source-line-no">222</span><span id="line-222">            return 
true;</span>
-<span class="source-line-no">223</span><span id="line-223">        }</span>
-<span class="source-line-no">224</span><span id="line-224"></span>
-<span class="source-line-no">225</span><span id="line-225">        
@Override</span>
-<span class="source-line-no">226</span><span id="line-226">        public 
boolean visitLeave(DependencyNode node) {</span>
-<span class="source-line-no">227</span><span id="line-227">            return 
parentsVisitor.visitLeave(node);</span>
-<span class="source-line-no">228</span><span id="line-228">        }</span>
+<span class="source-line-no">220</span><span id="line-220">        
@Override</span>
+<span class="source-line-no">221</span><span id="line-221">        public 
boolean visitEnter(DependencyNode node) {</span>
+<span class="source-line-no">222</span><span id="line-222">            
parentsVisitor.visitEnter(node);</span>
+<span class="source-line-no">223</span><span id="line-223">            
DependencyNodeHopCountPair pair = new DependencyNodeHopCountPair(node, 
this);</span>
+<span class="source-line-no">224</span><span id="line-224">            String 
key = pair.constructKey();</span>
+<span class="source-line-no">225</span><span id="line-225"></span>
+<span class="source-line-no">226</span><span id="line-226">            if 
(includes != null &amp;&amp; !includes.isEmpty() &amp;&amp; 
!includes.contains(key)) {</span>
+<span class="source-line-no">227</span><span id="line-227">                
return true;</span>
+<span class="source-line-no">228</span><span id="line-228">            }</span>
 <span class="source-line-no">229</span><span id="line-229"></span>
-<span class="source-line-no">230</span><span id="line-230">        public 
List&lt;List&lt;DependencyNode&gt;&gt; getConflicts() {</span>
-<span class="source-line-no">231</span><span id="line-231">            
List&lt;List&lt;DependencyNode&gt;&gt; output = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">232</span><span id="line-232">            for 
(List&lt;DependencyNodeHopCountPair&gt; pairs : keyToPairsMap.values()) {</span>
-<span class="source-line-no">233</span><span id="line-233">                if 
(containsConflicts(pairs)) {</span>
-<span class="source-line-no">234</span><span id="line-234">                    
List&lt;DependencyNode&gt; outputSubList = new 
ArrayList&lt;&gt;(pairs.size());</span>
-<span class="source-line-no">235</span><span id="line-235">                    
for (DependencyNodeHopCountPair pair : pairs) {</span>
-<span class="source-line-no">236</span><span id="line-236">                    
    outputSubList.add(pair.getNode());</span>
-<span class="source-line-no">237</span><span id="line-237">                    
}</span>
-<span class="source-line-no">238</span><span id="line-238">                    
output.add(outputSubList);</span>
-<span class="source-line-no">239</span><span id="line-239">                
}</span>
-<span class="source-line-no">240</span><span id="line-240">            }</span>
-<span class="source-line-no">241</span><span id="line-241">            return 
output;</span>
-<span class="source-line-no">242</span><span id="line-242">        }</span>
-<span class="source-line-no">243</span><span id="line-243"></span>
-<span class="source-line-no">244</span><span id="line-244">        private 
boolean containsConflicts(List&lt;DependencyNodeHopCountPair&gt; pairs) {</span>
-<span class="source-line-no">245</span><span id="line-245">            
DependencyNodeHopCountPair resolvedPair = pairs.get(0);</span>
-<span class="source-line-no">246</span><span id="line-246">            
ArtifactVersion resolvedVersion = 
resolvedPair.extractArtifactVersion(uniqueVersions, false);</span>
-<span class="source-line-no">247</span><span id="line-247"></span>
-<span class="source-line-no">248</span><span id="line-248">            for 
(DependencyNodeHopCountPair pair : pairs) {</span>
-<span class="source-line-no">249</span><span id="line-249">                
ArtifactVersion version = pair.extractArtifactVersion(uniqueVersions, 
true);</span>
-<span class="source-line-no">250</span><span id="line-250">                if 
(resolvedVersion.compareTo(version) &lt; 0) {</span>
-<span class="source-line-no">251</span><span id="line-251">                    
return true;</span>
-<span class="source-line-no">252</span><span id="line-252">                
}</span>
-<span class="source-line-no">253</span><span id="line-253">            }</span>
-<span class="source-line-no">254</span><span id="line-254">            return 
false;</span>
-<span class="source-line-no">255</span><span id="line-255">        }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257">        
@Override</span>
-<span class="source-line-no">258</span><span id="line-258">        public 
DependencyNode getParent(DependencyNode node) {</span>
-<span class="source-line-no">259</span><span id="line-259">            return 
parentsVisitor.getParent(node);</span>
-<span class="source-line-no">260</span><span id="line-260">        }</span>
-<span class="source-line-no">261</span><span id="line-261">    }</span>
-<span class="source-line-no">262</span><span id="line-262"></span>
-<span class="source-line-no">263</span><span id="line-263">    private static 
class DependencyNodeHopCountPair implements 
Comparable&lt;DependencyNodeHopCountPair&gt; {</span>
-<span class="source-line-no">264</span><span id="line-264">        private 
final DependencyNode node;</span>
-<span class="source-line-no">265</span><span id="line-265">        private int 
hopCount;</span>
-<span class="source-line-no">266</span><span id="line-266">        private 
final ParentNodeProvider parentNodeProvider;</span>
-<span class="source-line-no">267</span><span id="line-267"></span>
-<span class="source-line-no">268</span><span id="line-268">        private 
DependencyNodeHopCountPair(DependencyNode node, ParentNodeProvider 
parentNodeProvider) {</span>
-<span class="source-line-no">269</span><span id="line-269">            
this.parentNodeProvider = parentNodeProvider;</span>
-<span class="source-line-no">270</span><span id="line-270">            
this.node = node;</span>
-<span class="source-line-no">271</span><span id="line-271">            
countHops();</span>
-<span class="source-line-no">272</span><span id="line-272">        }</span>
-<span class="source-line-no">273</span><span id="line-273"></span>
-<span class="source-line-no">274</span><span id="line-274">        private 
void countHops() {</span>
-<span class="source-line-no">275</span><span id="line-275">            
hopCount = 0;</span>
-<span class="source-line-no">276</span><span id="line-276">            
DependencyNode parent = parentNodeProvider.getParent(node);</span>
-<span class="source-line-no">277</span><span id="line-277">            while 
(parent != null) {</span>
-<span class="source-line-no">278</span><span id="line-278">                
hopCount++;</span>
-<span class="source-line-no">279</span><span id="line-279">                
parent = parentNodeProvider.getParent(parent);</span>
-<span class="source-line-no">280</span><span id="line-280">            }</span>
-<span class="source-line-no">281</span><span id="line-281">        }</span>
-<span class="source-line-no">282</span><span id="line-282"></span>
-<span class="source-line-no">283</span><span id="line-283">        private 
String constructKey() {</span>
-<span class="source-line-no">284</span><span id="line-284">            
Artifact artifact = ArtifactUtils.toArtifact(node);</span>
-<span class="source-line-no">285</span><span id="line-285">            return 
artifact.getGroupId() + ":" + artifact.getArtifactId();</span>
-<span class="source-line-no">286</span><span id="line-286">        }</span>
-<span class="source-line-no">287</span><span id="line-287"></span>
-<span class="source-line-no">288</span><span id="line-288">        public 
DependencyNode getNode() {</span>
-<span class="source-line-no">289</span><span id="line-289">            return 
node;</span>
-<span class="source-line-no">290</span><span id="line-290">        }</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292">        private 
ArtifactVersion extractArtifactVersion(boolean uniqueVersions, boolean 
usePremanagedVersion) {</span>
-<span class="source-line-no">293</span><span id="line-293">            if 
(usePremanagedVersion &amp;&amp; 
DependencyManagerUtils.getPremanagedVersion(node) != null) {</span>
-<span class="source-line-no">294</span><span id="line-294">                
return new 
DefaultArtifactVersion(DependencyManagerUtils.getPremanagedVersion(node));</span>
-<span class="source-line-no">295</span><span id="line-295">            }</span>
-<span class="source-line-no">296</span><span id="line-296"></span>
-<span class="source-line-no">297</span><span id="line-297">            
Artifact artifact = ArtifactUtils.toArtifact(node);</span>
-<span class="source-line-no">298</span><span id="line-298">            String 
version = uniqueVersions ? artifact.getVersion() : 
artifact.getBaseVersion();</span>
-<span class="source-line-no">299</span><span id="line-299">            if 
(version != null) {</span>
-<span class="source-line-no">300</span><span id="line-300">                
return new DefaultArtifactVersion(version);</span>
-<span class="source-line-no">301</span><span id="line-301">            }</span>
-<span class="source-line-no">302</span><span id="line-302">            try 
{</span>
-<span class="source-line-no">303</span><span id="line-303">                
return artifact.getSelectedVersion();</span>
-<span class="source-line-no">304</span><span id="line-304">            } catch 
(OverConstrainedVersionException e) {</span>
-<span class="source-line-no">305</span><span id="line-305">                
throw new RuntimeException("Version ranges problem with " + node.getArtifact(), 
e);</span>
-<span class="source-line-no">306</span><span id="line-306">            }</span>
-<span class="source-line-no">307</span><span id="line-307">        }</span>
-<span class="source-line-no">308</span><span id="line-308"></span>
-<span class="source-line-no">309</span><span id="line-309">        public int 
getHopCount() {</span>
-<span class="source-line-no">310</span><span id="line-310">            return 
hopCount;</span>
-<span class="source-line-no">311</span><span id="line-311">        }</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313">        public int 
compareTo(DependencyNodeHopCountPair other) {</span>
-<span class="source-line-no">314</span><span id="line-314">            return 
Integer.compare(hopCount, other.getHopCount());</span>
-<span class="source-line-no">315</span><span id="line-315">        }</span>
-<span class="source-line-no">316</span><span id="line-316">    }</span>
-<span class="source-line-no">317</span><span id="line-317">}</span>
+<span class="source-line-no">230</span><span id="line-230">            
keyToPairsMap.computeIfAbsent(key, k1 -&gt; new 
ArrayList&lt;&gt;()).add(pair);</span>
+<span class="source-line-no">231</span><span id="line-231">            
keyToPairsMap.get(key).sort(DependencyNodeHopCountPair::compareTo);</span>
+<span class="source-line-no">232</span><span id="line-232">            return 
true;</span>
+<span class="source-line-no">233</span><span id="line-233">        }</span>
+<span class="source-line-no">234</span><span id="line-234"></span>
+<span class="source-line-no">235</span><span id="line-235">        
@Override</span>
+<span class="source-line-no">236</span><span id="line-236">        public 
boolean visitLeave(DependencyNode node) {</span>
+<span class="source-line-no">237</span><span id="line-237">            return 
parentsVisitor.visitLeave(node);</span>
+<span class="source-line-no">238</span><span id="line-238">        }</span>
+<span class="source-line-no">239</span><span id="line-239"></span>
+<span class="source-line-no">240</span><span id="line-240">        public 
List&lt;List&lt;DependencyNode&gt;&gt; getConflicts() {</span>
+<span class="source-line-no">241</span><span id="line-241">            
List&lt;List&lt;DependencyNode&gt;&gt; output = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">242</span><span id="line-242">            for 
(List&lt;DependencyNodeHopCountPair&gt; pairs : keyToPairsMap.values()) {</span>
+<span class="source-line-no">243</span><span id="line-243">                if 
(containsConflicts(pairs)) {</span>
+<span class="source-line-no">244</span><span id="line-244">                    
List&lt;DependencyNode&gt; outputSubList = new 
ArrayList&lt;&gt;(pairs.size());</span>
+<span class="source-line-no">245</span><span id="line-245">                    
for (DependencyNodeHopCountPair pair : pairs) {</span>
+<span class="source-line-no">246</span><span id="line-246">                    
    outputSubList.add(pair.getNode());</span>
+<span class="source-line-no">247</span><span id="line-247">                    
}</span>
+<span class="source-line-no">248</span><span id="line-248">                    
output.add(outputSubList);</span>
+<span class="source-line-no">249</span><span id="line-249">                
}</span>
+<span class="source-line-no">250</span><span id="line-250">            }</span>
+<span class="source-line-no">251</span><span id="line-251">            return 
output;</span>
+<span class="source-line-no">252</span><span id="line-252">        }</span>
+<span class="source-line-no">253</span><span id="line-253"></span>
+<span class="source-line-no">254</span><span id="line-254">        private 
boolean containsConflicts(List&lt;DependencyNodeHopCountPair&gt; pairs) {</span>
+<span class="source-line-no">255</span><span id="line-255">            
DependencyNodeHopCountPair resolvedPair = pairs.get(0);</span>
+<span class="source-line-no">256</span><span id="line-256">            
ArtifactVersion resolvedVersion = 
resolvedPair.extractArtifactVersion(uniqueVersions, false);</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258">            for 
(DependencyNodeHopCountPair pair : pairs) {</span>
+<span class="source-line-no">259</span><span id="line-259">                
ArtifactVersion version = pair.extractArtifactVersion(uniqueVersions, 
true);</span>
+<span class="source-line-no">260</span><span id="line-260">                if 
(resolvedVersion.compareTo(version) &lt; 0) {</span>
+<span class="source-line-no">261</span><span id="line-261">                    
return true;</span>
+<span class="source-line-no">262</span><span id="line-262">                
}</span>
+<span class="source-line-no">263</span><span id="line-263">            }</span>
+<span class="source-line-no">264</span><span id="line-264">            return 
false;</span>
+<span class="source-line-no">265</span><span id="line-265">        }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">        
@Override</span>
+<span class="source-line-no">268</span><span id="line-268">        public 
DependencyNode getParent(DependencyNode node) {</span>
+<span class="source-line-no">269</span><span id="line-269">            return 
parentsVisitor.getParent(node);</span>
+<span class="source-line-no">270</span><span id="line-270">        }</span>
+<span class="source-line-no">271</span><span id="line-271">    }</span>
+<span class="source-line-no">272</span><span id="line-272"></span>
+<span class="source-line-no">273</span><span id="line-273">    private static 
class DependencyNodeHopCountPair implements 
Comparable&lt;DependencyNodeHopCountPair&gt; {</span>
+<span class="source-line-no">274</span><span id="line-274">        private 
final DependencyNode node;</span>
+<span class="source-line-no">275</span><span id="line-275">        private int 
hopCount;</span>
+<span class="source-line-no">276</span><span id="line-276">        private 
final ParentNodeProvider parentNodeProvider;</span>
+<span class="source-line-no">277</span><span id="line-277"></span>
+<span class="source-line-no">278</span><span id="line-278">        private 
DependencyNodeHopCountPair(DependencyNode node, ParentNodeProvider 
parentNodeProvider) {</span>
+<span class="source-line-no">279</span><span id="line-279">            
this.parentNodeProvider = parentNodeProvider;</span>
+<span class="source-line-no">280</span><span id="line-280">            
this.node = node;</span>
+<span class="source-line-no">281</span><span id="line-281">            
countHops();</span>
+<span class="source-line-no">282</span><span id="line-282">        }</span>
+<span class="source-line-no">283</span><span id="line-283"></span>
+<span class="source-line-no">284</span><span id="line-284">        private 
void countHops() {</span>
+<span class="source-line-no">285</span><span id="line-285">            
hopCount = 0;</span>
+<span class="source-line-no">286</span><span id="line-286">            
DependencyNode parent = parentNodeProvider.getParent(node);</span>
+<span class="source-line-no">287</span><span id="line-287">            while 
(parent != null) {</span>
+<span class="source-line-no">288</span><span id="line-288">                
hopCount++;</span>
+<span class="source-line-no">289</span><span id="line-289">                
parent = parentNodeProvider.getParent(parent);</span>
+<span class="source-line-no">290</span><span id="line-290">            }</span>
+<span class="source-line-no">291</span><span id="line-291">        }</span>
+<span class="source-line-no">292</span><span id="line-292"></span>
+<span class="source-line-no">293</span><span id="line-293">        private 
String constructKey() {</span>
+<span class="source-line-no">294</span><span id="line-294">            
Artifact artifact = ArtifactUtils.toArtifact(node);</span>
+<span class="source-line-no">295</span><span id="line-295">            return 
artifact.getGroupId() + ":" + artifact.getArtifactId();</span>
+<span class="source-line-no">296</span><span id="line-296">        }</span>
+<span class="source-line-no">297</span><span id="line-297"></span>
+<span class="source-line-no">298</span><span id="line-298">        public 
DependencyNode getNode() {</span>
+<span class="source-line-no">299</span><span id="line-299">            return 
node;</span>
+<span class="source-line-no">300</span><span id="line-300">        }</span>
+<span class="source-line-no">301</span><span id="line-301"></span>
+<span class="source-line-no">302</span><span id="line-302">        private 
ArtifactVersion extractArtifactVersion(boolean uniqueVersions, boolean 
usePremanagedVersion) {</span>
+<span class="source-line-no">303</span><span id="line-303">            if 
(usePremanagedVersion &amp;&amp; 
DependencyManagerUtils.getPremanagedVersion(node) != null) {</span>
+<span class="source-line-no">304</span><span id="line-304">                
return new 
DefaultArtifactVersion(DependencyManagerUtils.getPremanagedVersion(node));</span>
+<span class="source-line-no">305</span><span id="line-305">            }</span>
+<span class="source-line-no">306</span><span id="line-306"></span>
+<span class="source-line-no">307</span><span id="line-307">            
Artifact artifact = ArtifactUtils.toArtifact(node);</span>
+<span class="source-line-no">308</span><span id="line-308">            String 
version = uniqueVersions ? artifact.getVersion() : 
artifact.getBaseVersion();</span>
+<span class="source-line-no">309</span><span id="line-309">            if 
(version != null) {</span>
+<span class="source-line-no">310</span><span id="line-310">                
return new DefaultArtifactVersion(version);</span>
+<span class="source-line-no">311</span><span id="line-311">            }</span>
+<span class="source-line-no">312</span><span id="line-312">            try 
{</span>
+<span class="source-line-no">313</span><span id="line-313">                
return artifact.getSelectedVersion();</span>
+<span class="source-line-no">314</span><span id="line-314">            } catch 
(OverConstrainedVersionException e) {</span>
+<span class="source-line-no">315</span><span id="line-315">                
throw new RuntimeException("Version ranges problem with " + node.getArtifact(), 
e);</span>
+<span class="source-line-no">316</span><span id="line-316">            }</span>
+<span class="source-line-no">317</span><span id="line-317">        }</span>
+<span class="source-line-no">318</span><span id="line-318"></span>
+<span class="source-line-no">319</span><span id="line-319">        public int 
getHopCount() {</span>
+<span class="source-line-no">320</span><span id="line-320">            return 
hopCount;</span>
+<span class="source-line-no">321</span><span id="line-321">        }</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323">        public int 
compareTo(DependencyNodeHopCountPair other) {</span>
+<span class="source-line-no">324</span><span id="line-324">            return 
Integer.compare(hopCount, other.getHopCount());</span>
+<span class="source-line-no">325</span><span id="line-325">        }</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327">}</span>
 
 
 



Reply via email to