From a585d8f349742f6bd9be4ea895125a71ee0a477c Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 20 Nov 2012 12:01:43 +0400 Subject: [PATCH] show error notification if 'clean artifact' action failed [rev by Dmitry A.] --- .../compiler/actions/BuildArtifactAction.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java index 96ad44deb6ee..6f660d1706a3 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java @@ -15,6 +15,8 @@ */ package com.intellij.compiler.actions; +import com.intellij.notification.NotificationGroup; +import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonShortcuts; import com.intellij.openapi.actionSystem.Presentation; @@ -34,6 +36,7 @@ import com.intellij.openapi.ui.popup.MultiSelectionListPopupStep; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -57,6 +60,8 @@ import java.util.*; * @author nik */ public class BuildArtifactAction extends DumbAwareAction { + private static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.balloonGroup("Clean artifact"); + public BuildArtifactAction() { super("Build Artifacts...", "Select and build artifacts configured in the project", null); } @@ -165,12 +170,12 @@ public class BuildArtifactAction extends DumbAwareAction { } Map outputPathContainingSourceRoots = new HashMap(); - final List files = new ArrayList(); + final List> toClean = new ArrayList>(); Set artifacts = getArtifacts(myArtifactPopupItems, myProject); for (Artifact artifact : artifacts) { String outputPath = artifact.getOutputFilePath(); if (outputPath != null) { - files.add(new File(FileUtil.toSystemDependentName(outputPath))); + toClean.add(Pair.create(new File(FileUtil.toSystemDependentName(outputPath)), artifact)); final VirtualFile outputFile = LocalFileSystem.getInstance().findFileByPath(outputPath); if (parents.contains(outputFile)) { outputPathContainingSourceRoots.put(artifact.getName(), outputPath); @@ -202,11 +207,18 @@ public class BuildArtifactAction extends DumbAwareAction { new Task.Backgroundable(myProject, "Cleaning artifacts...", true) { @Override public void run(@NotNull ProgressIndicator indicator) { - for (File file : files) { + List deleted = new ArrayList(); + for (Pair pair : toClean) { indicator.checkCanceled(); - FileUtil.delete(file); + File file = pair.getFirst(); + if (!FileUtil.delete(file)) { + NOTIFICATION_GROUP.createNotification("Cannot clean '" + pair.getSecond().getName() + "' artifact", "cannot delete '" + file.getAbsolutePath() + "'", NotificationType.ERROR, null).notify(myProject); + } + else { + deleted.add(file); + } } - LocalFileSystem.getInstance().refreshIoFiles(files, true, true, null); + LocalFileSystem.getInstance().refreshIoFiles(deleted, true, true, null); } }.queue(); }