/** * {@inheritDoc} */ public boolean accept( DependencyNode node ) { for ( DependencyNodeFilter filter : filters ) { if ( !filter.accept( node ) ) { return false; } } return true; }
/** * {@inheritDoc} */ public boolean accept( DependencyNode node ) { for ( DependencyNode descendantNode : descendantNodes ) { if ( isAncestorOrSelf( node, descendantNode ) ) { return true; } } return false; }
/** * @return * A filter to only extract artifacts deployed from scala distributions */ private DependencyNodeFilter createScalaDistroDependencyFilter() { List<ArtifactFilter> filters = new ArrayList<ArtifactFilter>(); filters.add(new ScalaDistroArtifactFilter()); return new AndDependencyNodeFilter(filters); }
/** Visits a node (and all dependencies) to see if it contains duplicate scala versions */ private void checkArtifactForScalaVersion(String requiredScalaVersion, DependencyNode rootNode) throws Exception { final CheckScalaVersionVisitor visitor = new CheckScalaVersionVisitor(requiredScalaVersion, getLog()); CollectingDependencyNodeVisitor collectingVisitor = new CollectingDependencyNodeVisitor(); DependencyNodeVisitor firstPassVisitor = new FilteringDependencyNodeVisitor( collectingVisitor, createScalaDistroDependencyFilter() ); rootNode.accept( firstPassVisitor ); DependencyNodeFilter secondPassFilter = new AncestorOrSelfDependencyNodeFilter( collectingVisitor.getNodes() ); DependencyNodeVisitor filteredVisitor = new FilteringDependencyNodeVisitor( visitor, secondPassFilter ); rootNode.accept( filteredVisitor ); if(visitor.isFailed()) { visitor.logScalaDependents(); if(failOnMultipleScalaVersions) { getLog().error("Multiple versions of scala libraries detected!"); throw new MojoFailureException("Multiple versions of scala libraries detected!"); } getLog().warn("Multiple versions of scala libraries detected!"); } }
/** * Gets the dependency node filter to use when serializing the dependency graph. * * @return the dependency node filter, or <code>null</code> if none required */ private DependencyNodeFilter createDependencyNodeFilter( String includes ) { List<DependencyNodeFilter> filters = new ArrayList<>(); // filter includes if ( includes != null ) { List<String> patterns = Arrays.asList( includes.split( "," ) ); getLog().debug( "+ Filtering dependency tree by artifact include patterns: " + patterns ); ArtifactFilter artifactFilter = new StrictPatternIncludesArtifactFilter( patterns ); filters.add( new ArtifactDependencyNodeFilter( artifactFilter ) ); } return filters.isEmpty() ? null : new AndDependencyNodeFilter( filters ); }
/** * Serializes the specified dependency tree to a string. * * @param rootNode the dependency tree root node to serialize * @return the serialized dependency tree */ private void serializeDependencyTree( DependencyNode rootNode, String key, Sink sink ) { DependencyNodeVisitor visitor = getSerializingDependencyNodeVisitor( sink ); visitor = new BuildingDependencyNodeVisitor( visitor ); DependencyNodeFilter nodeFilter = createDependencyNodeFilter( key ); if ( nodeFilter != null ) { CollectingDependencyNodeVisitor collectingVisitor = new CollectingDependencyNodeVisitor(); DependencyNodeVisitor firstPassVisitor = new FilteringDependencyNodeVisitor( collectingVisitor, nodeFilter ); rootNode.accept( firstPassVisitor ); DependencyNodeFilter secondPassFilter = new AncestorOrSelfDependencyNodeFilter( collectingVisitor.getNodes() ); visitor = new FilteringDependencyNodeVisitor( visitor, secondPassFilter ); } rootNode.accept( visitor ); }
/** * {@inheritDoc} */ public boolean endVisit( DependencyNode node ) { boolean visit; if ( filter.accept( node ) ) { visit = visitor.endVisit( node ); } else { visit = true; } return visit; }
private void computeDependencyTree(final Project project, final SensorContext context) { LOG.warn("Computation of Maven dependencies by SonarQube is deprecated. Please update the version of SonarQube Maven plugin to 2.5+"); try { DependencyNode root = treeBuilder.buildDependencyTree(project.getPom(), localRepository, artifactFactory, artifactMetadataSource, null, artifactCollector); DependencyNodeVisitor visitor = new BuildingDependencyNodeVisitor(new DependencyNodeVisitor() { @Override public boolean visit(DependencyNode node) { return true; } @Override public boolean endVisit(DependencyNode node) { if (node.getParent() != null && node.getParent() != node) { saveDependency(project, node, context); } return true; } }); // mode verbose OFF : do not show the same lib many times DependencyNodeFilter filter = StateDependencyNodeFilter.INCLUDED; CollectingDependencyNodeVisitor collectingVisitor = new CollectingDependencyNodeVisitor(); DependencyNodeVisitor firstPassVisitor = new FilteringDependencyNodeVisitor(collectingVisitor, filter); root.accept(firstPassVisitor); DependencyNodeFilter secondPassFilter = new AncestorOrSelfDependencyNodeFilter(collectingVisitor.getNodes()); visitor = new FilteringDependencyNodeVisitor(visitor, secondPassFilter); root.accept(visitor); } catch (DependencyTreeBuilderException e) { throw new SonarException("Can not load the graph of dependencies of the project " + project.getKey(), e); } }
/** * {@inheritDoc} */ public boolean visit( DependencyNode node ) { boolean visit; if ( filter.accept( node ) ) { visit = visitor.visit( node ); } else { visit = true; } return visit; }
rootNode.accept( firstPassVisitor ); DependencyNodeFilter secondPassFilter = new AncestorOrSelfDependencyNodeFilter( collectingVisitor.getNodes() ); visitor = new FilteringDependencyNodeVisitor( visitor, secondPassFilter );