1 package org_scala_tools_maven_dependency;
2
3 import org.apache.maven.artifact.Artifact;
4 import org.apache.maven.plugin.logging.Log;
5 import org.apache.maven.shared.dependency.tree.DependencyNode;
6 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
7 import org_scala_tools_maven.VersionNumber;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
12 import static org_scala_tools_maven_dependency.ScalaConstants.*;
13
14
15
16
17
18 public class CheckScalaVersionVisitor implements DependencyNodeVisitor {
19 private VersionNumber _version;
20 private boolean _failed = false;
21 private Log _log;
22
23 private List<String> scalaDependentArtifactStrings = new ArrayList<String>();
24
25 public boolean endVisit(@SuppressWarnings("unused") DependencyNode node) {
26 return !_failed;
27 }
28
29 public CheckScalaVersionVisitor(String projectVerison, Log log) {
30 this._version = new VersionNumber(projectVerison);
31 this._log = log;
32 }
33
34 public boolean isScalaDistroArtifact(Artifact artifact) {
35 return SCALA_DISTRO_GROUP.equalsIgnoreCase(artifact.getGroupId()) &&
36 SCALA_DISTRO_ARTIFACTS.contains(artifact.getArtifactId());
37 }
38 public boolean visit(DependencyNode node) {
39
40 Artifact artifact = node.getArtifact();
41 _log.debug("checking ["+artifact+"] for scala version");
42
43 if(isScalaDistroArtifact(artifact) && artifact.getVersion() != null) {
44 VersionNumber originalVersion = new VersionNumber(artifact.getVersion());
45 if(originalVersion.compareTo(_version) != 0) {
46 _failed = true;
47 }
48
49 if(node.getParent() != null) {
50 final Artifact parentArtifact = node.getParent().getArtifact();
51 scalaDependentArtifactStrings.add(" " + StringUtil.makeArtifactNameString(parentArtifact) + " requires scala version: " + originalVersion);
52 }
53 } else {
54
55 }
56 return !_failed;
57 }
58
59 public boolean isFailed() {
60 return _failed;
61 }
62 public void logScalaDependents() {
63 _log.warn(" Expected all dependencies to require Scala version: " + _version);
64 for(String dependString : scalaDependentArtifactStrings) {
65 _log.warn(dependString);
66 }
67 }
68 }