diff --git a/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java b/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java index 7fbd182279e9..08f8df3b63ed 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java @@ -45,4 +45,9 @@ public abstract class AbstractActivity implements Activity { public void setDependsOn(@NotNull Collection dependencies) { myDependencies = dependencies; } + + @Override + public String toString() { + return getPresentableName(); + } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java b/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java index b4f9191d761c..8c59620f816e 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java @@ -29,4 +29,10 @@ public class ActivityList extends ArrayList implements Activity { public ActivityList(@NotNull Collection c) { super(c); } + + @NotNull + @Override + public String getPresentableName() { + return toString(); + } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java index fa8d14af7a1e..1497b929ec30 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java @@ -49,7 +49,7 @@ public class ActivityManagerImpl extends ActivityManager { } @Override - public void buildDirty(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback) { + public void build(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback) { run(createModulesBuildActivity(true, modules), callback); } @@ -80,17 +80,17 @@ public class ActivityManagerImpl extends ActivityManager { } @Override - public void buildProjectDirty(@Nullable ActivityStatusNotification callback) { - run(createProjectBuildActivity(true, myProject), callback); + public void buildAllModules(@Nullable ActivityStatusNotification callback) { + run(createAllModulesBuildActivity(true, myProject), callback); } @Override - public void rebuildProject(@Nullable ActivityStatusNotification callback) { - run(createProjectBuildActivity(false, myProject), callback); + public void rebuildAllModules(@Nullable ActivityStatusNotification callback) { + run(createAllModulesBuildActivity(false, myProject), callback); } @Override - public Activity createProjectBuildActivity(boolean isIncrementalBuild, Project project) { + public Activity createAllModulesBuildActivity(boolean isIncrementalBuild, Project project) { return createModulesBuildActivity(isIncrementalBuild, ModuleManager.getInstance(project).getModules()); } @@ -135,18 +135,17 @@ public class ActivityManagerImpl extends ActivityManager { AtomicInteger errorsCounter = new AtomicInteger(); AtomicInteger warningsCounter = new AtomicInteger(); AtomicBoolean abortedFlag = new AtomicBoolean(false); - ActivityChunkStatusNotification chunkStatusNotification = callback == null ? null : new ActivityChunkStatusNotification() { + ActivityStatusNotification chunkStatusNotification = callback == null ? null : new ActivityStatusNotification() { @Override - public void finished(boolean aborted, int errors, int warnings) { + public void finished(@NotNull ActivityExecutionResult executionResult) { int inProgress = inProgressCounter.decrementAndGet(); - int allErrors = errorsCounter.addAndGet(errors); - int allWarnings = warningsCounter.addAndGet(warnings); - if (aborted) { + int allErrors = errorsCounter.addAndGet(executionResult.getErrors()); + int allWarnings = warningsCounter.addAndGet(executionResult.getWarnings()); + if (executionResult.isAborted()) { abortedFlag.set(true); } - callback.chunkFinished(aborted, errors, warnings, inProgress); if (inProgress == 0) { - callback.finished(abortedFlag.get(), allErrors, allWarnings); + callback.finished(new ActivityExecutionResult(abortedFlag.get(), allErrors, allWarnings)); } } }; diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java index 64fc5c9aa06b..b2b7195205bd 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java @@ -17,6 +17,7 @@ package com.intellij.activity.impl; import com.intellij.activity.ArtifactBuildActivity; import com.intellij.packaging.artifacts.Artifact; +import org.jetbrains.annotations.NotNull; /** * @author Vladislav.Soroka @@ -34,4 +35,10 @@ public class ArtifactBuildActivityImpl extends AbstractBuildActivity implements public Artifact getArtifact() { return myArtifact; } + + @NotNull + @Override + public String getPresentableName() { + return "Artifact '" + myArtifact.getName() + "' build activity"; + } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java b/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java index de5bd75cf0ca..87330f629222 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java @@ -47,10 +47,11 @@ public class InternalActivityRunner extends ActivityRunner { @Override public void run(@NotNull Project project, @NotNull ActivityContext context, - @Nullable ActivityChunkStatusNotification callback, + @Nullable ActivityStatusNotification callback, @NotNull Collection activities) { CompileStatusNotification compileNotification = - callback == null ? null : (aborted, errors, warnings, compileContext) -> callback.finished(aborted, errors, warnings); + callback == null ? null : (aborted, errors, warnings, compileContext) -> + callback.finished(new ActivityExecutionResult(aborted, errors, warnings)); Map, List> activityMap = groupBy(activities); runModulesBuildActivities(project, context, compileNotification, activityMap); diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java index 991c7f92c95d..c388d7cf9cb3 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java @@ -37,4 +37,10 @@ public class ModuleBuildActivityImpl extends AbstractBuildActivity implements Mo public Module getModule() { return myModule; } + + @NotNull + @Override + public String getPresentableName() { + return "Module '" + myModule.getName() + "' build activity"; + } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java index 7d469da532d5..c793588c67ae 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java @@ -19,7 +19,9 @@ import com.intellij.activity.ModuleFilesBuildActivity; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; +import java.util.Arrays; import java.util.Collection; /** @@ -42,4 +44,10 @@ public class ModuleFilesBuildActivityImpl extends ModuleBuildActivityImpl implem public VirtualFile[] getFiles() { return myFiles; } + + @NotNull + @Override + public String getPresentableName() { + return "Files build activity '" + Arrays.toString(myFiles) + "'"; + } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java index 870af55a6d9d..e5267435bdf6 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java @@ -90,4 +90,10 @@ public class RunActivityImpl extends AbstractActivity implements RunActivity { public RunnerAndConfigurationSettings getSettings() { return mySettings; } + + @NotNull + @Override + public String getPresentableName() { + return "Run activity '" + myRunProfile.getName() + "'"; + } } diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/CompileDirtyAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/CompileDirtyAction.java index 7922c1ad7cad..2153ac8625cd 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileDirtyAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileDirtyAction.java @@ -15,16 +15,16 @@ */ package com.intellij.compiler.actions; +import com.intellij.activity.ActivityManager; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.activity.ActivityManager; import com.intellij.openapi.project.Project; public class CompileDirtyAction extends CompileActionBase { protected void doAction(DataContext dataContext, Project project) { - ActivityManager.getInstance(project).buildProjectDirty(); + ActivityManager.getInstance(project).buildAllModules(); } public void update(AnActionEvent e){ diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java index a0ae0869bc32..9f47ed1932be 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java @@ -15,27 +15,30 @@ */ package com.intellij.compiler.actions; +import com.intellij.activity.ActivityExecutionResult; +import com.intellij.activity.ActivityManager; +import com.intellij.activity.ActivityStatusNotification; import com.intellij.history.LocalHistory; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.activity.ActivityStatusNotificationAdapter; -import com.intellij.activity.ActivityManager; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; public class CompileProjectAction extends CompileActionBase { protected void doAction(DataContext dataContext, final Project project) { - ActivityManager.getInstance(project).rebuildProject(new ActivityStatusNotificationAdapter() { + ActivityManager.getInstance(project).rebuildAllModules(new ActivityStatusNotification() { @Override - public void finished(boolean aborted, int errors, int warnings) { - if (aborted || project.isDisposed()) { + public void finished(@NotNull ActivityExecutionResult executionResult) { + if (executionResult.isAborted() || project.isDisposed()) { return; } String text = getTemplatePresentation().getText(); LocalHistory.getInstance().putSystemLabel( - project, CompilerBundle.message(errors == 0 ? "rebuild.lvcs.label.no.errors" : "rebuild.lvcs.label.with.errors", text)); + project, CompilerBundle + .message(executionResult.getErrors() == 0 ? "rebuild.lvcs.label.no.errors" : "rebuild.lvcs.label.with.errors", text)); } }); } diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java index c0ebf2795d8e..5b6c8a3890b1 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java @@ -15,8 +15,8 @@ */ package com.intellij.compiler.actions; -import com.intellij.openapi.actionSystem.*; import com.intellij.activity.ActivityManager; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; @@ -36,7 +36,7 @@ public class MakeModuleAction extends CompileActionBase { modules = new Module[]{module}; } try { - ActivityManager.getInstance(project).buildDirty(modules); + ActivityManager.getInstance(project).build(modules); } catch (Exception e) { LOG.error(e); diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java b/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java index 834d98af7184..20e7d078945a 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java @@ -176,10 +176,10 @@ public class BuildArtifactsBeforeRunTaskProvider extends BeforeRunTaskProvider activities); public void run(@NotNull Project project, @NotNull ActivityContext context, - @Nullable ActivityChunkStatusNotification callback, + @Nullable ActivityStatusNotification callback, @NotNull Activity... activities) { run(project, context, callback, Arrays.asList(activities)); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java b/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java index 5d0f8effb626..81c499e3f44f 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java +++ b/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java @@ -15,25 +15,15 @@ */ package com.intellij.activity; +import org.jetbrains.annotations.NotNull; + /** * @author Vladislav.Soroka * @since 4/29/2016 */ public interface ActivityStatusNotification { - /** - * @param aborted true if the at least one activity chunk has been cancelled. - * @param errors error count - * @param warnings warning count + * @param executionResult provides aggregated information about activity execution */ - void finished(boolean aborted, int errors, int warnings); - - /** - * - * @param aborted true if the activity chunk has been cancelled. - * @param errors error count - * @param warnings warning count - * @param inProgress not finished activity chunks count - */ - void chunkFinished(boolean aborted, int errors, int warnings, int inProgress); + void finished(@NotNull ActivityExecutionResult executionResult); } diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java index b0714b2e438f..db6ef95bde3c 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -138,9 +138,9 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider activities) { String executionName = "Gradle build"; @@ -96,7 +96,7 @@ public class GradleActivityRunner extends ActivityRunner { int successes = success ? successCounter.incrementAndGet() : successCounter.get(); int errors = success ? errorCounter.get() : errorCounter.incrementAndGet(); if (successes + errors == rootPaths.size()) { - callback.finished(false, errors, 0); + callback.finished(new ActivityExecutionResult(false, errors, 0)); } } }; @@ -179,8 +179,8 @@ public class GradleActivityRunner extends ActivityRunner { List tasks = ContainerUtil.mapNotNull(ExternalSystemApiUtil.findAll(moduleDataNode, ProjectKeys.TASK), node -> node.getData().isInherited() ? null : node.getData().getName()); - Collection cleanTasks = cleanTasksMap.getModifiable(rootProjectPath); - Collection buildTasks = buildTasksMap.getModifiable(rootProjectPath); + Collection cleanRootTasks = cleanTasksMap.getModifiable(rootProjectPath); + Collection buildRootTasks = buildTasksMap.getModifiable(rootProjectPath); final String moduleType = ExternalSystemApiUtil.getExternalModuleType(module); final String gradlePath; @@ -194,32 +194,38 @@ public class GradleActivityRunner extends ActivityRunner { String task = StringUtil.isEmpty(sourceSetName) || "main".equals(sourceSetName) ? "classes" : sourceSetName + "Classes"; if (tasks.contains(task)) { if (!moduleBuildActivity.isIncrementalBuild()) { - cleanTasks.add(gradlePath + ":clean" + StringUtil.capitalize(task)); + cleanRootTasks.add(gradlePath + ":clean" + StringUtil.capitalize(task)); } - buildTasks.add(gradlePath + ":" + task); + buildRootTasks.add(gradlePath + ":" + task); } else if ("main".equals(sourceSetName) || "test".equals(sourceSetName)) { if (!moduleBuildActivity.isIncrementalBuild()) { - cleanTasks.add(gradlePath + ":clean"); + cleanRootTasks.add(gradlePath + ":clean"); } - buildTasks.add(gradlePath + ":build"); + buildRootTasks.add(gradlePath + ":build"); } } else { gradlePath = projectId.charAt(0) == ':' ? projectId : ""; if (!moduleBuildActivity.isIncrementalBuild()) { if (tasks.contains("classes")) { - cleanTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":cleanClasses" : gradlePath + ":cleanClasses")); + cleanRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":cleanClasses" : gradlePath + ":cleanClasses")); } else if(tasks.contains("clean")){ - cleanTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "clean" : gradlePath + ":clean")); + cleanRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "clean" : gradlePath + ":clean")); + } + else { + cleanTasksMap.getModifiable(externalProjectPath).add("clean"); } } if (tasks.contains("classes")) { - buildTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":classes" : gradlePath + ":classes")); + buildRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":classes" : gradlePath + ":classes")); + } + else if (tasks.contains("build")) { + buildRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "build" : gradlePath + ":build")); } else { - buildTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "build" : gradlePath + ":build")); + buildTasksMap.getModifiable(externalProjectPath).add("build"); } } }