@SuppressWarnings({"rawtypes"})
 private BuildState createBuildState(
     BuildState parentBuildState, MultiJobProject multiJobProject, Job project) {
   int previousBuildNumber = 0;
   int lastBuildNumber = 0;
   int lastSuccessBuildNumber = 0;
   int lastFailureBuildNumber = 0;
   MultiJobBuild previousParentBuild =
       multiJobProject.getBuildByNumber(parentBuildState.getPreviousBuildNumber());
   MultiJobBuild lastParentBuild =
       multiJobProject.getBuildByNumber(parentBuildState.getLastBuildNumber());
   MultiJobBuild lastParentSuccessBuild =
       multiJobProject.getBuildByNumber(parentBuildState.getLastSuccessBuildNumber());
   MultiJobBuild lastParentFailureBuild =
       multiJobProject.getBuildByNumber(parentBuildState.getLastFailureBuildNumber());
   if (previousParentBuild != null) {
     List<SubBuild> subBuilds = previousParentBuild.getSubBuilds();
     for (SubBuild subBuild : subBuilds) {
       if (subBuild.getJobName().equals(project.getName())) {
         previousBuildNumber = subBuild.getBuildNumber();
       }
     }
   }
   if (lastParentBuild != null) {
     List<SubBuild> subBuilds = lastParentBuild.getSubBuilds();
     for (SubBuild subBuild : subBuilds) {
       if (subBuild.getJobName().equals(project.getName())) {
         lastBuildNumber = subBuild.getBuildNumber();
       }
     }
   }
   if (lastParentSuccessBuild != null) {
     List<SubBuild> subBuilds = lastParentSuccessBuild.getSubBuilds();
     for (SubBuild subBuild : subBuilds) {
       if (subBuild.getJobName().equals(project.getName())) {
         AbstractBuild build = (AbstractBuild) project.getBuildByNumber(subBuild.getBuildNumber());
         if (build != null && Result.SUCCESS.equals(build.getResult())) {
           lastSuccessBuildNumber = subBuild.getBuildNumber();
           break;
         } else {
           lastParentSuccessBuild =
               multiJobProject.getBuildByNumber(parentBuildState.getPreviousBuildNumber());
         }
       }
     }
   }
   if (lastParentFailureBuild != null) {
     List<SubBuild> subBuilds = lastParentFailureBuild.getSubBuilds();
     for (SubBuild subBuild : subBuilds) {
       if (subBuild.getJobName().equals(project.getName())) {
         AbstractBuild build = (AbstractBuild) project.getBuildByNumber(subBuild.getBuildNumber());
         if (build != null && Result.FAILURE.equals(((AbstractBuild) build).getResult())) {
           lastFailureBuildNumber = subBuild.getBuildNumber();
           break;
         } else {
           lastParentFailureBuild =
               multiJobProject.getBuildByNumber(parentBuildState.getPreviousBuildNumber());
         }
       }
     }
   }
   return new BuildState(
       project.getName(),
       previousBuildNumber,
       lastBuildNumber,
       lastSuccessBuildNumber,
       lastFailureBuildNumber);
 }