Predicate<IdeaPluginDescriptor> (List<ActionCommand> actionCommands, Logger log) { Set<PluginId> result = new LinkedHashSet<>(); for (ActionCommand command : actionCommands) { String source; if (command instanceof StartupActionScriptManager.CopyCommand) { source = ((StartupActionScriptManager.CopyCommand)command).getSource(); } else if (command instanceof StartupActionScriptManager.UnzipCommand) { source = ((StartupActionScriptManager.UnzipCommand)command).getSource(); } else { continue; } try { IdeaPluginDescriptorImpl descriptor = PluginDescriptorLoader.loadDescriptorFromArtifact(Paths.get(source), null); if (descriptor != null) { result.add(descriptor.getPluginId()); } else { log.info("No plugin descriptor in pending update: " + source); } } catch (IOException e) { log.info("Failed to load plugin descriptor from pending update: " + source); } } return descriptor -> { PluginId pluginId = descriptor.getPluginId(); if (result.contains(pluginId)) { log.info("Plugin '" + pluginId + "' skipped due to a pending update"); return true; } else { return false; } }; }