void (@NotNull AnActionEvent e) { ExtensionsRootType extensionsRootType = ExtensionsRootType.getInstance(); VirtualFile file = e.getData(CommonDataKeys.VIRTUAL_FILE); PluginId pluginId = extensionsRootType.getOwner(file); String path = extensionsRootType.getPath(file); assert file != null && pluginId != null && path != null; Task.Backgroundable extractResourcesInBackground = new Task.Backgroundable( e.getProject(), LangBundle.message("progress.title.extracting.bundled.extensions.for.plugin", pluginId.getIdString())) { @Override public void run(@NotNull ProgressIndicator indicator) { try { extensionsRootType.extractBundledResources(pluginId, path); VirtualFileManager.getInstance().refreshWithoutFileWatcher(true); } catch (IOException ex) { ExtensionsRootType.LOG.warn("Failed to extract bundled extensions for " + file.getPath(), ex); } } }; ProgressManager.getInstance().run(extractResourcesInBackground); }