This commit is contained in:
Guillaume Nodet
2021-09-07 16:23:49 +02:00
parent f36f531b00
commit f59cd2a0d1

View File

@@ -1,3 +1,18 @@
/*
* Copyright 2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.maven.graph; package org.apache.maven.graph;
/* /*
@@ -18,7 +33,6 @@ package org.apache.maven.graph;
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -26,7 +40,6 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import org.apache.maven.execution.ProjectDependencyGraph; import org.apache.maven.execution.ProjectDependencyGraph;
import org.apache.maven.project.DuplicateProjectException; import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
@@ -39,8 +52,7 @@ import org.codehaus.plexus.util.dag.CycleDetectedException;
* @author Benjamin Bentmann * @author Benjamin Bentmann
*/ */
public class DefaultProjectDependencyGraph public class DefaultProjectDependencyGraph
implements ProjectDependencyGraph implements ProjectDependencyGraph {
{
private ProjectSorter sorter; private ProjectSorter sorter;
@@ -49,103 +61,88 @@ public class DefaultProjectDependencyGraph
/** /**
* Creates a new project dependency graph based on the specified projects. * Creates a new project dependency graph based on the specified projects.
* *
* @param projects The projects to create the dependency graph with * @param projects The projects to create the dependency graph with
* @throws DuplicateProjectException * @throws DuplicateProjectException
* @throws CycleDetectedException * @throws CycleDetectedException
*/ */
public DefaultProjectDependencyGraph( Collection<MavenProject> projects ) public DefaultProjectDependencyGraph(Collection<MavenProject> projects)
throws CycleDetectedException, DuplicateProjectException throws CycleDetectedException, DuplicateProjectException {
{
super(); super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) ); this.allProjects = Collections.unmodifiableList(new ArrayList<>(projects));
this.sorter = new ProjectSorter( projects ); this.sorter = new ProjectSorter(projects);
} }
/** /**
* Creates a new project dependency graph based on the specified projects. * Creates a new project dependency graph based on the specified projects.
* *
* @param allProjects All collected projects. * @param allProjects All collected projects.
* @param projects The projects to create the dependency graph with. * @param projects The projects to create the dependency graph with.
* *
* @throws DuplicateProjectException * @throws DuplicateProjectException
* @throws CycleDetectedException * @throws CycleDetectedException
* @since 3.5.0 * @since 3.5.0
*/ */
public DefaultProjectDependencyGraph( final List<MavenProject> allProjects, public DefaultProjectDependencyGraph(final List<MavenProject> allProjects,
final Collection<MavenProject> projects ) final Collection<MavenProject> projects)
throws CycleDetectedException, DuplicateProjectException throws CycleDetectedException, DuplicateProjectException {
{
super(); super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) ); this.allProjects = Collections.unmodifiableList(new ArrayList<>(allProjects));
this.sorter = new ProjectSorter( projects ); this.sorter = new ProjectSorter(projects);
} }
/** /**
* @since 3.5.0 * @since 3.5.0
*/ */
public List<MavenProject> getAllProjects() public List<MavenProject> getAllProjects() {
{
return this.allProjects; return this.allProjects;
} }
public List<MavenProject> getSortedProjects() public List<MavenProject> getSortedProjects() {
{ return new ArrayList<>(sorter.getSortedProjects());
return new ArrayList<>( sorter.getSortedProjects() );
} }
public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive ) public List<MavenProject> getDownstreamProjects(MavenProject project, boolean transitive) {
{ Objects.requireNonNull(project, "project cannot be null");
Objects.requireNonNull( project, "project cannot be null" );
Set<String> projectIds = new HashSet<>(); Set<String> projectIds = new HashSet<>();
getDownstreamProjects( ProjectSorter.getId( project ), projectIds, transitive ); getDownstreamProjects(ProjectSorter.getId(project), projectIds, transitive);
return getSortedProjects( projectIds ); return getSortedProjects(projectIds);
} }
private void getDownstreamProjects( String projectId, Set<String> projectIds, boolean transitive ) private void getDownstreamProjects(String projectId, Set<String> projectIds, boolean transitive) {
{ for (String id : sorter.getDependents(projectId)) {
for ( String id : sorter.getDependents( projectId ) ) if (projectIds.add(id) && transitive) {
{ getDownstreamProjects(id, projectIds, transitive);
if ( projectIds.add( id ) && transitive )
{
getDownstreamProjects( id, projectIds, transitive );
} }
} }
} }
public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive ) public List<MavenProject> getUpstreamProjects(MavenProject project, boolean transitive) {
{ Objects.requireNonNull(project, "project cannot be null");
Objects.requireNonNull( project, "project cannot be null" );
Set<String> projectIds = new HashSet<>(); Set<String> projectIds = new HashSet<>();
getUpstreamProjects( ProjectSorter.getId( project ), projectIds, transitive ); getUpstreamProjects(ProjectSorter.getId(project), projectIds, transitive);
return getSortedProjects( projectIds ); return getSortedProjects(projectIds);
} }
private void getUpstreamProjects( String projectId, Collection<String> projectIds, boolean transitive ) private void getUpstreamProjects(String projectId, Collection<String> projectIds, boolean transitive) {
{ for (String id : sorter.getDependencies(projectId)) {
for ( String id : sorter.getDependencies( projectId ) ) if (projectIds.add(id) && transitive) {
{ getUpstreamProjects(id, projectIds, transitive);
if ( projectIds.add( id ) && transitive )
{
getUpstreamProjects( id, projectIds, transitive );
} }
} }
} }
private List<MavenProject> getSortedProjects( Set<String> projectIds ) private List<MavenProject> getSortedProjects(Set<String> projectIds) {
{ List<MavenProject> result = new ArrayList<>(projectIds.size());
List<MavenProject> result = new ArrayList<>( projectIds.size() );
for ( MavenProject mavenProject : sorter.getSortedProjects() ) for (MavenProject mavenProject : sorter.getSortedProjects()) {
{ if (projectIds.contains(ProjectSorter.getId(mavenProject))) {
if ( projectIds.contains( ProjectSorter.getId( mavenProject ) ) ) result.add(mavenProject);
{
result.add( mavenProject );
} }
} }
@@ -153,8 +150,7 @@ public class DefaultProjectDependencyGraph
} }
@Override @Override
public String toString() public String toString() {
{
return sorter.getSortedProjects().toString(); return sorter.getSortedProjects().toString();
} }