private DaemonClientConnection findConnection(
      List<DaemonInfo> daemonInfos, ExplainingSpec<DaemonContext> constraint) {
    for (final DaemonInfo daemonInfo : daemonInfos) {
      if (!constraint.isSatisfiedBy(daemonInfo.getContext())) {
        LOGGER.debug(
            "Found daemon (address: {}, idle: {}) however its context does not match the desired criteria.\n"
                + constraint.whyUnsatisfied(daemonInfo.getContext())
                + "\n"
                + "  Looking for a different daemon...",
            daemonInfo.getAddress(),
            daemonInfo.isIdle());
        continue;
      }

      try {
        return connectToDaemon(daemonInfo, new CleanupOnStaleAddress(daemonInfo, true));
      } catch (ConnectException e) {
        LOGGER.debug(
            "Cannot connect to the daemon at "
                + daemonInfo.getAddress()
                + " due to "
                + e
                + ". Trying a different daemon...");
      }
    }
    return null;
  }
 private DaemonClientConnection connectToDaemonWithId(
     DaemonStartupInfo startupInfo, ExplainingSpec<DaemonContext> constraint)
     throws ConnectException {
   // Look for 'our' daemon among the busy daemons - a daemon will start in busy state so that
   // nobody else will grab it.
   for (DaemonInfo daemonInfo : daemonRegistry.getBusy()) {
     if (daemonInfo.getContext().getUid().equals(startupInfo.getUid())) {
       try {
         if (!constraint.isSatisfiedBy(daemonInfo.getContext())) {
           throw new GradleException(
               "The newly created daemon process has a different context than expected."
                   + "\nIt won't be possible to reconnect to this daemon. Context mismatch: "
                   + "\n"
                   + constraint.whyUnsatisfied(daemonInfo.getContext()));
         }
         return connectToDaemon(daemonInfo, startupInfo.getDiagnostics());
       } catch (ConnectException e) {
         throw new GradleException(
             "The forked daemon process died before we could connect.\n" + startupInfo.describe(),
             e);
       }
     }
   }
   return null;
 }
  private DaemonClientConnection findConnection(
      List<DaemonInfo> daemons, ExplainingSpec<DaemonContext> constraint) {
    for (DaemonInfo daemon : daemons) {
      if (!constraint.isSatisfiedBy(daemon.getContext())) {
        LOGGER.debug(
            "Found daemon {} however its context does not match the desired criteria.\n"
                + constraint.whyUnsatisfied(daemon.getContext())
                + "\n"
                + "  Looking for a different daemon...",
            daemon);
        continue;
      }

      try {
        return connectToDaemon(daemon, new CleanupOnStaleAddress(daemon, true));
      } catch (ConnectException e) {
        LOGGER.debug(
            "Cannot connect to daemon {} due to {}. Trying a different daemon...", daemon, e);
      }
    }
    return null;
  }