docs: public @CheckForNull SCMRevisionState calcRevisionsFromBuild(@Nonnull Run<?,?> build, @Nullable FilePath workspace, @Nullable Launcher launcher, @Nonnull TaskListener listener) throws IOException, InterruptedException {
          if (build instanceof AbstractBuild && Util.isOverridden(SCM.class, getClass(), "calcRevisionsFromBuild", AbstractBuild.class, Launcher.class, TaskListener.class)) {
              return calcRevisionsFromBuild((AbstractBuild) build, launcher, listener);
          } else {
              throw new AbstractMethodError("you must override the new calcRevisionsFromBuild overload");
          }
      }