@SuppressWarnings("rawtypes") private void addMultiProject( MultiJobProject parent, MultiJobProject project, BuildState buildState, int nestLevel, String phaseName, List<TopLevelItem> out) { out.add(new ProjectWrapper(parent, project, buildState, nestLevel)); List<Builder> builders = project.getBuilders(); for (Builder builder : builders) { int phaseNestLevel = nestLevel + 1; if (builder instanceof MultiJobBuilder) { MultiJobBuilder reactorBuilder = (MultiJobBuilder) builder; List<PhaseJobsConfig> subProjects = reactorBuilder.getPhaseJobs(); String currentPhaseName = reactorBuilder.getPhaseName(); PhaseWrapper phaseWrapper = new PhaseWrapper(phaseNestLevel, currentPhaseName); out.add(phaseWrapper); for (PhaseJobsConfig projectConfig : subProjects) { TopLevelItem tli = Hudson.getInstance().getItem(projectConfig.getJobName()); if (tli instanceof MultiJobProject) { MultiJobProject subProject = (MultiJobProject) tli; BuildState jobBuildState = createBuildState(buildState, project, subProject); phaseWrapper.addChildBuildState(jobBuildState); addMultiProject( project, subProject, jobBuildState, phaseNestLevel + 1, currentPhaseName, out); } else { Job subProject = (Job) tli; if (subProject == null) continue; BuildState jobBuildState = createBuildState(buildState, project, subProject); phaseWrapper.addChildBuildState(jobBuildState); addSimpleProject(project, subProject, jobBuildState, phaseNestLevel + 1, out); } } } } }