1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.lifecycle.internal;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24 import javax.inject.Named;
25 import javax.inject.Singleton;
26 import org.apache.maven.execution.MavenSession;
27 import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
28 import org.apache.maven.project.MavenProject;
29
30
31
32
33
34
35
36 @Named
37 @Singleton
38 public class BuildListCalculator {
39 public ProjectBuildList calculateProjectBuilds(MavenSession session, List<TaskSegment> taskSegments) {
40 List<ProjectSegment> projectBuilds = new ArrayList<>();
41
42 MavenProject rootProject = session.getTopLevelProject();
43
44 for (TaskSegment taskSegment : taskSegments) {
45 List<MavenProject> projects;
46
47 if (taskSegment.isAggregating()) {
48 projects = Collections.singletonList(rootProject);
49 } else {
50 projects = session.getProjects();
51 }
52 for (MavenProject project : projects) {
53 ClassLoader tccl = Thread.currentThread().getContextClassLoader();
54 MavenProject currentProject = session.getCurrentProject();
55 try {
56 BuilderCommon.attachToThread(project);
57 session.setCurrentProject(project);
58 projectBuilds.add(new ProjectSegment(project, taskSegment, session));
59 } finally {
60 session.setCurrentProject(currentProject);
61 Thread.currentThread().setContextClassLoader(tccl);
62 }
63 }
64 }
65 return new ProjectBuildList(projectBuilds);
66 }
67 }