1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.internal.impl.scope;
20
21 import org.eclipse.aether.collection.DependencyGraphTransformationContext;
22 import org.eclipse.aether.collection.DependencyGraphTransformer;
23 import org.eclipse.aether.graph.Dependency;
24 import org.eclipse.aether.graph.DependencyNode;
25 import org.eclipse.aether.impl.scope.BuildScope;
26 import org.eclipse.aether.impl.scope.InternalScopeManager;
27 import org.eclipse.aether.scope.DependencyScope;
28
29 import static java.util.Objects.requireNonNull;
30
31
32
33
34
35
36
37
38
39
40 public final class ManagedDependencyContextRefiner implements DependencyGraphTransformer {
41 private final InternalScopeManager scopeManager;
42
43 public ManagedDependencyContextRefiner(InternalScopeManager scopeManager) {
44 this.scopeManager = requireNonNull(scopeManager, "scopeManager");
45 }
46
47 @Override
48 public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context) {
49 requireNonNull(node, "node cannot be null");
50 requireNonNull(context, "context cannot be null");
51 String ctx = node.getRequestContext();
52
53 if ("project".equals(ctx)) {
54 String scope = getBuildpathScope(node);
55 if (scope != null) {
56 ctx += '/' + scope;
57 node.setRequestContext(ctx);
58 }
59 }
60
61 for (DependencyNode child : node.getChildren()) {
62 transformGraph(child, context);
63 }
64
65 return node;
66 }
67
68 private String getBuildpathScope(DependencyNode node) {
69 Dependency dependency = node.getDependency();
70 if (dependency == null) {
71 return null;
72 }
73
74 return scopeManager
75 .getDependencyScope(dependency.getScope())
76 .flatMap(s ->
77 scopeManager.getDependencyScopeMainProjectBuildScope(s).map(BuildScope::getId))
78 .orElse(null);
79 }
80 }