code:     public void addRecipients(final ExtendedEmailPublisherContext context, EnvVars env, Set<InternetAddress> to, Set<InternetAddress> cc, Set<InternetAddress> bcc) {
          final class Debug implements RecipientProviderUtilities.IDebug {
              private final ExtendedEmailPublisherDescriptor descriptor
                      = Jenkins.getActiveInstance().getDescriptorByType(ExtendedEmailPublisherDescriptor.class);
  
              private final PrintStream logger = context.getListener().getLogger();
  
              public void send(final String format, final Object... args) {
                  descriptor.debug(logger, format, args);
              }
          }
          final Debug debug = new Debug();
          debug.send("Sending email to upstream committer(s).");
          Run<?, ?> cur;
          Cause.UpstreamCause upc = context.getRun().getCause(Cause.UpstreamCause.class);
          while (upc != null) {
              Job<?, ?> p = (Job<?, ?>) Jenkins.getActiveInstance().getItemByFullName(upc.getUpstreamProject());
              if(p == null) {
                  context.getListener().getLogger().print("There is a break in the project linkage, could not retrieve upstream project information");
                  break;
              }
              cur = p.getBuildByNumber(upc.getUpstreamBuild());
              upc = cur.getCause(Cause.UpstreamCause.class);
              addUpstreamCommittersTriggeringBuild(cur, to, cc, bcc, env, context, debug);
          }
      }
  
      /**
       * Adds for the given upstream build the committers to the recipient list for each commit in the upstream build.
       *
       * @param build the upstream build
       * @param to the to recipient list
       * @param cc the cc recipient list
       * @param bcc the bcc recipient list
       * @param env
       * @param listener
       */
  