package org.infernus.idea.checkstyle.actions; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKeys; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import org.infernus.idea.checkstyle.CheckStylePlugin; import org.infernus.idea.checkstyle.toolwindow.CheckStyleToolWindowPanel; /** * Action to stop a check in progress. */ public class StopCheck extends BaseAction { @Override public void actionPerformed(final AnActionEvent event) { final Project project = DataKeys.PROJECT.getData(event.getDataContext()); if (project == null) { return; } try { final CheckStylePlugin checkStylePlugin = project.getComponent(CheckStylePlugin.class); if (checkStylePlugin == null) { throw new IllegalStateException("Couldn't get checkstyle plugin"); } final ToolWindow toolWindow = ToolWindowManager.getInstance( project).getToolWindow(CheckStyleToolWindowPanel.ID_TOOLWINDOW); toolWindow.activate(() -> { setProgressText(toolWindow, "plugin.status.in-progress.current"); checkStylePlugin.stopChecks(); setProgressText(toolWindow, "plugin.status.aborted"); }); } catch (Throwable e) { CheckStylePlugin.processErrorAndLog("Abort Scan", e); } } @Override public void update(final AnActionEvent event) { super.update(event); try { final Project project = DataKeys.PROJECT.getData(event.getDataContext()); if (project == null) { // check if we're loading... return; } final CheckStylePlugin checkStylePlugin = project.getComponent(CheckStylePlugin.class); if (checkStylePlugin == null) { throw new IllegalStateException("Couldn't get checkstyle plugin"); } final Presentation presentation = event.getPresentation(); presentation.setEnabled(checkStylePlugin.isScanInProgress()); } catch (Throwable e) { CheckStylePlugin.processErrorAndLog("Abort button update", e); } } }