Source:
<code>protected List<String> run() throws Exception { final Jenkins jenkins = Jenkins.get(); final Item item = getItemForCredentials(getContext()); final SlackNotifier.DescriptorImpl slackDesc = jenkins .getDescriptorByType(SlackNotifier.DescriptorImpl.class); final String tokenCredentialId = step.tokenCredentialId != null ? step.tokenCredentialId : slackDesc.getTokenCredentialId(); final boolean botUser = step.botUser || slackDesc.isBotUser(); final SlackUserIdResolver userIdResolver = slackDesc.getSlackUserIdResolver(); final Run run = getContext().get(Run.class); final TaskListener listener = getContext().get(TaskListener.class); Objects.requireNonNull(listener, "Listener is mandatory here"); if (!botUser) { listener.getLogger().println("The slackUserIdFromEmail step requires bot user mode"); return null; } final String populatedToken; try { populatedToken = CredentialsObtainer.getTokenToUse(tokenCredentialId, item, null); } catch (final IllegalArgumentException e) { listener.error(Messages.notificationFailedWithException(e)); return null; } final List<String> slackUserIds = new ArrayList<>(); try (CloseableHttpClient client = getHttpClient()) { if (botUser && userIdResolver != null && run != null) { userIdResolver.setAuthToken(populatedToken); userIdResolver.setHttpClient(client); final List<String> userIds = userIdResolver.resolveUserIdsForRun(run); slackUserIds .addAll(userIds.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList())); } } catch (final IOException e) { <START> logger.log(Level.WARNING, "Error closing HttpClient", e); <END> } return slackUserIds; }</code><technical_language>Is this reason IOException occur</technical_language>

Target:
protected List<String> run() throws Exception { final Jenkins jenkins = Jenkins.get(); final Item item = getItemForCredentials(getContext()); final SlackNotifier.DescriptorImpl slackDesc = jenkins .getDescriptorByType(SlackNotifier.DescriptorImpl.class); final String tokenCredentialId = step.tokenCredentialId != null ? step.tokenCredentialId : slackDesc.getTokenCredentialId(); final boolean botUser = step.botUser || slackDesc.isBotUser(); final SlackUserIdResolver userIdResolver = slackDesc.getSlackUserIdResolver(); final Run run = getContext().get(Run.class); final TaskListener listener = getContext().get(TaskListener.class); Objects.requireNonNull(listener, "Listener is mandatory here"); if (!botUser) { listener.getLogger().println("The slackUserIdsFromCommitters step requires bot user mode"); return null; } final String populatedToken; try { populatedToken = CredentialsObtainer.getTokenToUse(tokenCredentialId, item, null); } catch (final IllegalArgumentException e) { listener.error(Messages.notificationFailedWithException(e)); return null; } final List<String> slackUserIds = new ArrayList<>(); try (CloseableHttpClient client = getHttpClient()) { if (userIdResolver != null && run != null) { userIdResolver.setAuthToken(populatedToken); userIdResolver.setHttpClient(client); final List<String> userIds = userIdResolver.resolveUserIdsForRun(run); slackUserIds .addAll(userIds.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList())); } } catch (final IOException e) { logger.log(Level.WARNING, "Error closing HttpClient", e); } return slackUserIds; }