Package scala_maven_dependency

Source Code of scala_maven_dependency.CheckScalaVersionVisitor

package scala_maven_dependency;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.shared.dependency.tree.DependencyNode;
import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;

import scala_maven.VersionNumber;

import java.util.ArrayList;
import java.util.List;

import static scala_maven_dependency.ScalaConstants.*;
/**
* Ensures that all scala versions match the given version.
* @author JSuereth
*
*/
public class CheckScalaVersionVisitor implements DependencyNodeVisitor {
    private VersionNumber _version;
    private boolean _failed = false;
    private Log _log;
    private String _scalaOrganization;

    private List<String> scalaDependentArtifactStrings = new ArrayList<String>();

    @Override
    public boolean endVisit(DependencyNode node) {
        return !_failed;
    }

    public CheckScalaVersionVisitor(VersionNumber version, Log log,String scalaOrganization) {
        this._version = version;
        this._log = log;
        this._scalaOrganization=scalaOrganization;
    }

    public boolean isScalaDistroArtifact(Artifact artifact) {
        return _scalaOrganization.equalsIgnoreCase(artifact.getGroupId()) &&
        SCALA_DISTRO_ARTIFACTS.contains(artifact.getArtifactId());
    }
    @Override
    public boolean visit(DependencyNode node) {
        //TODO - Do we care about provided scope?
        Artifact artifact = node.getArtifact();
        _log.debug("checking ["+artifact+"] for scala version");
        //TODO - Handle version ranges???? does that make sense given scala's binary incompatability!
        if(isScalaDistroArtifact(artifact) && artifact.getVersion() != null) {
            VersionNumber originalVersion = new VersionNumber(artifact.getVersion());
            if(_version.compareTo(originalVersion) != 0) { //_version can be a VersionNumberMask
                _failed = true;
            }
            //If this dependency is transitive, we want to track which artifact requires this...
            if(node.getParent() != null) { //TODO - Go all the way up the parent chain till we hit the bottom....
                final Artifact parentArtifact = node.getParent().getArtifact();
                scalaDependentArtifactStrings.add(" " + StringUtil.makeArtifactNameString(parentArtifact) + " requires scala version: " + originalVersion);
            }
        } else {
            //TODO - What now?
        }
        return !_failed;
    }

    public boolean isFailed() {
        return _failed;
    }
    public void logScalaDependents() {
        _log.warn(" Expected all dependencies to require Scala version: " + _version);
        for(String dependString : scalaDependentArtifactStrings) {
            _log.warn(dependString);
        }
    }
}
TOP

Related Classes of scala_maven_dependency.CheckScalaVersionVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.