1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.dependency.graph.internal;
20
21 import java.util.Arrays;
22 import java.util.Comparator;
23 import java.util.List;
24
25 import org.eclipse.aether.RepositoryException;
26 import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictContext;
27 import org.eclipse.aether.util.graph.transformer.ConflictResolver.ScopeSelector;
28 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
29
30
31
32
33 public class VerboseJavaScopeSelector extends ScopeSelector {
34 public static final String REDUCED_SCOPE = "REDUCED_SCOPE";
35
36 private final ScopeSelector scopeSelector = new JavaScopeSelector();
37
38 @Override
39 public void selectScope(ConflictContext context) throws RepositoryException {
40 scopeSelector.selectScope(context);
41
42 context.getItems().stream()
43 .flatMap(i -> i.getScopes().stream())
44 .distinct()
45 .max(new ScopeComparator())
46 .filter(s -> s != context.getScope())
47 .ifPresent(s -> context.getWinner().getNode().setData(REDUCED_SCOPE, s));
48 }
49
50 static class ScopeComparator implements Comparator<String> {
51 List<String> orderedScopes = Arrays.asList("compile", "runtime", "provided", "test");
52
53 @Override
54 public int compare(String lhs, String rhs) {
55 return orderedScopes.indexOf(rhs) - orderedScopes.indexOf(lhs);
56 }
57 }
58 }