private void initCounters()

in rest-api/src/jetbrains/buildServer/server/rest/model/change/ChangeStatus.java [201:284]


  private void initCounters() {
    // This is heavily inspired by ChangeDetailsCalculator, but with some simplifications, so not reusing it here.
    SecurityContext context = myBeanContext.getSingletonService(SecurityContext.class);
    SUser self = (SUser) context.getAuthorityHolder().getAssociatedUser();

    myCriticalCollector = new BuildsCollector(myFields.getNestedField("criticalBuilds"));
    myCompilationErrorCollector = new BuildsCollector(myFields.getNestedField("compilationErrorBuilds"));
    myNewTestsFailedCollector = new BuildsCollector(myFields.getNestedField("newTestsFailedBuilds"));
    myNotCriticalCollector = new BuildsCollector(myFields.getNestedField("notCriticalBuilds"));

    final boolean includePersonalBuilds = self != null && StringUtil.isTrue(self.getPropertyValue(StandardProperties.SHOW_ALL_PERSONAL_BUILDS));

    for (BuildTypeChangeStatus status : myChangeStatus.getBuildTypesStatus().values()) {
      final SBuild firstBuild = status.getFirstBuild();
      if (firstBuild == null) {
        SQueuedBuild queued = status.getQueuedBuild();
        if(queued != null && (includePersonalBuilds || !queued.isPersonal())) {
          myQueuedBuildsCount++;
        }

        if (status.getQueuedBuild() == null) {
          myPendingCount++;
        }
        continue;
      }

      if(firstBuild.isPersonal() && !includePersonalBuilds) {
        continue;
      }

      if(firstBuild.getCanceledInfo() != null) {
        myCancelledCount++;
        continue;
      }

      if (firstBuild.isFinished()) {
        myFinishedBuildsCount++;

        if (status.isSuccessful()) {
          mySuccessfulBuildsCount++;
          continue; // no need to count problems, as our build is green
        }
      } else {
        myRunningBuildsCount++;

        Status runningBuildStatus = firstBuild.getBuildStatus();
        if(runningBuildStatus.isSuccessful()) {
          myRunningSuccessfullyCount++;
          continue; // no need to count problems, as our build is green
        }
      }

      myFailedBuildsCount++;

      String statusText = BuildStatusText.getBuildStatus(firstBuild, self);
      final BuildPromotionEx buildPromo = (BuildPromotionEx) firstBuild.getBuildPromotion();
      switch (statusText) {
        case BuildStatusText.NEW_TESTS_FAILED:
          myNewTestsFailedCollector.put(buildPromo);
          break;

        case BuildStatusText.CRITICAL_PROBLEM:
          myCriticalCollector.put(buildPromo);
          break;

        default:
          myNotCriticalCollector.put(buildPromo);
      }

      boolean compilationErrorCounted = false;
      for (BuildProblem problem : buildPromo.getBuildProblems()) {
        if (problem.isMutedInBuild()) continue;
        final String problemType = problem.getBuildProblemData().getType();
        if (BuildProblemData.TC_FAILED_TESTS_TYPE.equals(problemType) || ErrorData.isSnapshotDependencyError(problemType)) continue;

        if(BuildProblemData.TC_COMPILATION_ERROR_TYPE.equals(problemType) && !compilationErrorCounted) {
          myCompilationErrorCollector.put(buildPromo);
          compilationErrorCounted = true;
        }

        myTotalProblemCount++;
      }
    }
  }