docs: @Override
      public CauseOfBlockage getCauseOfBlockage() {
          // Block builds until they are done with post-production
          if (!isConcurrentBuild() && isLogUpdated()) {
              final R lastBuild = getLastBuild();
              if (lastBuild != null) {
                  return new BlockedBecauseOfBuildInProgress(lastBuild);
              } else {
                  // The build has been likely deleted after the isLogUpdated() call.
                  // Another cause may be an API implementation glitсh in the implementation for AbstractProject. 
                  // Anyway, we should let the code go then.
                  LOGGER.log(Level.FINE, "The last build has been deleted during the non-concurrent cause creation. The build is not blocked anymore");
              }
          }
          if (blockBuildWhenDownstreamBuilding()) {
              AbstractProject<?,?> bup = getBuildingDownstream();
              if (bup!=null)
                  return new BecauseOfDownstreamBuildInProgress(bup);
          }
          if (blockBuildWhenUpstreamBuilding()) {
              AbstractProject<?,?> bup = getBuildingUpstream();
              if (bup!=null)
                  return new BecauseOfUpstreamBuildInProgress(bup);
          }
          return null;
      }