package name.admitriev.jhelper.actions; import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import name.admitriev.jhelper.configuration.TaskConfiguration; import name.admitriev.jhelper.exceptions.NotificationException; import name.admitriev.jhelper.ui.Notificator; import java.io.IOException; public class DeleteTaskAction extends BaseAction { @Override protected void performAction(AnActionEvent e) { Project project = e.getProject(); if (project == null) { throw new NotificationException("No project found", "Are you in any project?"); } RunManagerEx runManager = RunManagerEx.getInstanceEx(project); RunnerAndConfigurationSettings selectedConfiguration = runManager.getSelectedConfiguration(); if (selectedConfiguration == null) { return; } RunConfiguration configuration = selectedConfiguration.getConfiguration(); if (configuration instanceof TaskConfiguration) { removeFiles(project, (TaskConfiguration) configuration); runManager.removeConfiguration(selectedConfiguration); selectSomeTaskConfiguration(runManager); } else { Notificator.showNotification( "Not a JHelper configuration", "To delete a configuration you should choose it first", NotificationType.WARNING ); } } private void removeFiles(Project project, TaskConfiguration taskConfiguration) { String cppPath = taskConfiguration.getCppPath(); ApplicationManager.getApplication().runWriteAction( new Runnable() { @Override public void run() { VirtualFile classFile = project.getBaseDir().findFileByRelativePath(cppPath); if (classFile != null) { try { classFile.delete(this); } catch (IOException ignored) { Notificator.showNotification( "Couldn't delete class file", NotificationType.WARNING ); } } } } ); } private static void selectSomeTaskConfiguration(RunManagerEx runManager) { for (RunnerAndConfigurationSettings settings : runManager.getAllSettings()) { if (settings.getConfiguration() instanceof TaskConfiguration) { runManager.setSelectedConfiguration(settings); return; } } } }