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 <a
href="mailto:[email protected]">Rex Hoffman</a></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<String> 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<String> 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 <a
href="mailto:[email protected]">Rex Hoffman</a></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<String> 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<String> 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<String> 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">
&& !dependency.getScope().equals(SCOPE_TEST)</span>
-<span class="source-line-no">075</span><span id="line-75">
&& !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<CharSequence> errorMsgs = new ArrayList<>(</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() > 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<String> 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<String> loc = new ArrayList<>();</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 < loc.size(); i++) {</span>
+<span class="source-line-no">092</span><span id="line-92"> for (int
j = 0; j < 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<String> loc = new ArrayList<>();</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 < loc.size(); i++) {</span>
-<span class="source-line-no">110</span><span id="line-110"> for
(int j = 0; j < 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<String>
getConvergenceErrorMsgs(List<List<DependencyNode>> errors) {</span>
-<span class="source-line-no">119</span><span id="line-119">
List<String> errorMsgs = new ArrayList<>();</span>
-<span class="source-line-no">120</span><span id="line-120"> for
(List<DependencyNode> 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<DependencyNode> 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() > 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<String>
getConvergenceErrorMsgs(List<List<DependencyNode>> errors) {</span>
+<span class="source-line-no">101</span><span id="line-101">
List<String> errorMsgs = new ArrayList<>();</span>
+<span class="source-line-no">102</span><span id="line-102"> for
(List<DependencyNode> 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<DependencyNode> 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() > 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> errorMessages =
buildErrorMessages(upperBoundDepsVisitor.getConflicts());</span>
-<span class="source-line-no">106</span><span id="line-106"> if
(errorMessages.size() > 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<String> buildErrorMessages(List<List<DependencyNode>>
conflicts) {</span>
-<span class="source-line-no">113</span><span id="line-113">
List<String> errorMessages = new
ArrayList<>(conflicts.size());</span>
-<span class="source-line-no">114</span><span id="line-114"> for
(List<DependencyNode> 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 && 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<DependencyNode> 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() > 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<String> loc = new ArrayList<>();</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) <-- ");</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 < loc.size(); i++) {</span>
-<span class="source-line-no">161</span><span id="line-161"> for
(int j = 0; j < 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<String> 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(() -> 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<String> 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<String> buildErrorMessages(List<List<DependencyNode>>
conflicts) {</span>
+<span class="source-line-no">123</span><span id="line-123">
List<String> errorMessages = new
ArrayList<>(conflicts.size());</span>
+<span class="source-line-no">124</span><span id="line-124"> for
(List<DependencyNode> 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 && 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<DependencyNode> 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() > 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<String> loc = new ArrayList<>();</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) <-- ");</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 < loc.size(); i++) {</span>
+<span class="source-line-no">171</span><span id="line-171"> for
(int j = 0; j < 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 && !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 && !"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 && !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<String> 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<String> 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 && !"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<String> 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<String, List<DependencyNodeHopCountPair>> keyToPairsMap =
new HashMap<>();</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 && !includes.isEmpty() &&
!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<String> 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<String, List<DependencyNodeHopCountPair>> keyToPairsMap =
new HashMap<>();</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 -> new
ArrayList<>()).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 && !includes.isEmpty() &&
!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<List<DependencyNode>> getConflicts() {</span>
-<span class="source-line-no">231</span><span id="line-231">
List<List<DependencyNode>> output = new ArrayList<>();</span>
-<span class="source-line-no">232</span><span id="line-232"> for
(List<DependencyNodeHopCountPair> 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<DependencyNode> outputSubList = new
ArrayList<>(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<DependencyNodeHopCountPair> 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) < 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<DependencyNodeHopCountPair> {</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 &&
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 -> new
ArrayList<>()).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<List<DependencyNode>> getConflicts() {</span>
+<span class="source-line-no">241</span><span id="line-241">
List<List<DependencyNode>> output = new ArrayList<>();</span>
+<span class="source-line-no">242</span><span id="line-242"> for
(List<DependencyNodeHopCountPair> 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<DependencyNode> outputSubList = new
ArrayList<>(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<DependencyNodeHopCountPair> 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) < 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<DependencyNodeHopCountPair> {</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 &&
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>