Skip to content

Commit d93fcf4

Browse files
committed
[FIXED] fixed dependency graph calculation
1 parent 12f3a88 commit d93fcf4

5 files changed

Lines changed: 59 additions & 33 deletions

File tree

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/dependency/solver/maven/MavenNDependencySolver.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.ArrayList;
44
import java.util.LinkedHashMap;
5+
import java.util.LinkedHashSet;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.NoSuchElementException;
@@ -291,8 +292,10 @@ public NDependency applyDependencyManagement(NDependency dependency, int depth)
291292
if (!NBlankable.isBlank(managed.scope()) && NBlankable.isBlank(dependency.scope())) {
292293
b.scope(managed.scope());
293294
}
294-
if (dependency.exclusions().isEmpty() && !managed.exclusions().isEmpty()) {
295-
b.exclusions(managed.exclusions());
295+
if (!managed.exclusions().isEmpty()) {
296+
LinkedHashSet<NId> all = new LinkedHashSet<>(dependency.exclusions());
297+
all.addAll(managed.exclusions());
298+
b.exclusions(new ArrayList<>(all));
296299
}
297300
return b.build();
298301
}

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/dependency/solver/maven/NDependencyInfo.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,20 @@ public class NDependencyInfo {
1111
public NDependency dependency;
1212
boolean optional;
1313
boolean provided;
14+
public boolean rejected;
1415

1516
public NDependencyInfo(NDependency dependency, int depth, boolean optional, boolean provided) {
17+
this(dependency, depth, optional, provided, false);
18+
}
19+
20+
public NDependencyInfo(NDependency dependency, int depth, boolean optional, boolean provided, boolean rejected) {
1621
this.real=dependency.toId();
1722
this.normalized = normalizedId(real);
1823
this.depth = depth;
1924
this.dependency = dependency;
2025
this.optional = optional;
2126
this.provided = provided;
27+
this.rejected = rejected;
2228
}
2329

2430
public static NId normalizedId(NId id) {

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/dependency/solver/maven/ParallelPassProcessor.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ private void processNode(NDependencyTreeNodeBuild currentNode, boolean pushProvi
8080
}
8181
NDescriptor effectiveDescriptor = currentNode.getEffectiveDescriptor();
8282
if (effectiveDescriptor != null) {
83-
mavenNDependencySolver.registerManagedDependencies(effectiveDescriptor);
83+
if (currentNode.depth == 0) {
84+
mavenNDependencySolver.registerManagedDependencies(effectiveDescriptor);
85+
}
8486
if (currentNode.depth == 0) {
8587
if (currentNode.dependency != null && !currentNode.isAcceptableDependency(currentNode.dependency)) {
8688
return;
@@ -126,6 +128,9 @@ private void processNode(NDependencyTreeNodeBuild currentNode, boolean pushProvi
126128
}
127129
} else {
128130
mavenNDependencySolver.logRejectedDependency(dependency);
131+
if (currentNode.depth == 0) {
132+
mergedVisitedSet.add(new NDependencyInfo(dependency, 0, dependency.isOptional(), false, true));
133+
}
129134
}
130135

131136
}
@@ -237,7 +242,9 @@ public NDependencies run() {
237242

238243
List<NDependencyTreeNode> mergedRootNodes = mergedRootNodeBuilders.stream().map(NDependencyTreeNodeBuild::build).collect(Collectors.toList());
239244
List<NDependencyTreeNode> nonMergedRootNodes = nonMergedRootNodeBuilders.stream().map(NDependencyTreeNodeBuild::build).collect(Collectors.toList());
240-
final NDependency[] mergedDepsList = mergedVisitedSet.visitedSet.values().stream().map(NDependencyInfo::getDependency)
245+
final NDependency[] mergedDepsList = mergedVisitedSet.visitedSet.values().stream()
246+
.filter(x -> !x.rejected)
247+
.map(NDependencyInfo::getDependency)
241248
.toArray(NDependency[]::new);
242249
final NDependency[] nonMergedDepsList = nonMergedVisitedSet.visitedSet.values().stream().map(NDependencyInfo::getDependency)
243250
.toArray(NDependency[]::new);

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/dependency/solver/maven/PassProcessor.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ private void processNode(NDependencyTreeNodeBuild currentNode, boolean pushProvi
5656
}
5757
NDescriptor effectiveDescriptor = currentNode.getEffectiveDescriptor();
5858
if (effectiveDescriptor != null) {
59-
mavenNDependencySolver.registerManagedDependencies(effectiveDescriptor);
59+
if (currentNode.depth == 0) {
60+
mavenNDependencySolver.registerManagedDependencies(effectiveDescriptor);
61+
}
6062
if (currentNode.depth == 0) {
6163
if (currentNode.dependency != null && !currentNode.isAcceptableDependency(currentNode.dependency)) {
6264
return;
@@ -102,6 +104,9 @@ private void processNode(NDependencyTreeNodeBuild currentNode, boolean pushProvi
102104
}
103105
} else {
104106
mavenNDependencySolver.logRejectedDependency(dependency);
107+
if (currentNode.depth == 0) {
108+
mergedVisitedSet.add(new NDependencyInfo(dependency, 0, dependency.isOptional(), false, true));
109+
}
105110
}
106111

107112
}
@@ -141,7 +146,9 @@ public NDependencies run() {
141146
}
142147
List<NDependencyTreeNode> mergedRootNodes = mergedRootNodeBuilders.stream().map(NDependencyTreeNodeBuild::build).collect(Collectors.toList());
143148
List<NDependencyTreeNode> nonMergedRootNodes = nonMergedRootNodeBuilders.stream().map(NDependencyTreeNodeBuild::build).collect(Collectors.toList());
144-
final NDependency[] mergedDepsList = mergedVisitedSet.visitedSet.values().stream().map(NDependencyInfo::getDependency)
149+
final NDependency[] mergedDepsList = mergedVisitedSet.visitedSet.values().stream()
150+
.filter(x -> !x.rejected)
151+
.map(NDependencyInfo::getDependency)
145152
.toArray(NDependency[]::new);
146153
final NDependency[] nonMergedDepsList = nonMergedVisitedSet.visitedSet.values().stream().map(NDependencyInfo::getDependency)
147154
.toArray(NDependency[]::new);

core/nuts-runtime/src/main/java/net/thevpc/nuts/runtime/standalone/workspace/DefaultNWorkspace.java

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,37 +1032,40 @@ protected NDescriptor _resolveEffectiveDescriptor(NDescriptor descriptor, NDescr
10321032
}
10331033
}
10341034
for (NDependency d : oldDependencies) {
1035-
if (NBlankable.isBlank(d.scope())
1036-
|| d.version().isBlank()
1037-
|| NBlankable.isBlank(d.optional())) {
1038-
NDependency standardDependencyOk = null;
1039-
for (NDependency standardDependency : effStandardDeps) {
1040-
if (standardDependency.shortName().equals(d.toId().shortName())) {
1041-
standardDependencyOk = standardDependency;
1042-
break;
1043-
}
1035+
NDependency standardDependencyOk = null;
1036+
for (NDependency standardDependency : effStandardDeps) {
1037+
if (standardDependency.shortName().equals(d.toId().shortName())) {
1038+
standardDependencyOk = standardDependency;
1039+
break;
10441040
}
1045-
if (standardDependencyOk != null) {
1046-
if (NBlankable.isBlank(d.scope())
1047-
&& !NBlankable.isBlank(standardDependencyOk.scope())) {
1048-
someChange = true;
1049-
d = d.builder().scope(standardDependencyOk.scope()).build();
1050-
}
1051-
if (NBlankable.isBlank(d.optional())
1052-
&& !NBlankable.isBlank(standardDependencyOk.optional())) {
1053-
someChange = true;
1054-
d = d.builder().optional(standardDependencyOk.optional()).build();
1055-
}
1056-
if (d.version().isBlank()
1057-
&& !standardDependencyOk.version().isBlank()) {
1041+
}
1042+
if (standardDependencyOk != null) {
1043+
if (NBlankable.isBlank(d.scope())
1044+
&& !NBlankable.isBlank(standardDependencyOk.scope())) {
1045+
someChange = true;
1046+
d = d.builder().scope(standardDependencyOk.scope()).build();
1047+
}
1048+
if (NBlankable.isBlank(d.optional())
1049+
&& !NBlankable.isBlank(standardDependencyOk.optional())) {
1050+
someChange = true;
1051+
d = d.builder().optional(standardDependencyOk.optional()).build();
1052+
}
1053+
if (d.version().isBlank()
1054+
&& !standardDependencyOk.version().isBlank()) {
1055+
someChange = true;
1056+
d = d.builder().version(standardDependencyOk.version()).build();
1057+
}
1058+
if (!standardDependencyOk.exclusions().isEmpty()) {
1059+
LinkedHashSet<NId> allExclusions = new LinkedHashSet<>(d.exclusions());
1060+
if (allExclusions.addAll(standardDependencyOk.exclusions())) {
10581061
someChange = true;
1059-
d = d.builder().version(standardDependencyOk.version()).build();
1062+
d = d.builder().exclusions(new ArrayList<>(allExclusions)).build();
10601063
}
10611064
}
1062-
if (d.version().isBlank()) {
1063-
wsModel.LOG
1064-
.log(NMsg.ofC("failed to resolve effective version for %s", d).asFineFail());
1065-
}
1065+
}
1066+
if (d.version().isBlank()) {
1067+
wsModel.LOG
1068+
.log(NMsg.ofC("failed to resolve effective version for %s", d).asFineFail());
10661069
}
10671070

10681071
if ("import".equals(d.scope())) {

0 commit comments

Comments
 (0)