diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java b/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java deleted file mode 100644 index 1497b929ec30..000000000000 --- a/java/compiler/impl/src/com/intellij/activity/impl/ActivityManagerImpl.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.activity.impl; - -import com.intellij.activity.*; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.packaging.artifacts.Artifact; -import com.intellij.util.Consumer; -import com.intellij.util.SmartList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import static com.intellij.util.containers.ContainerUtil.list; -import static com.intellij.util.containers.ContainerUtil.map; - -/** - * @author Vladislav.Soroka - * @since 5/11/2016 - */ -public class ActivityManagerImpl extends ActivityManager { - - private final ActivityRunner myDefaultActivityRunner = new InternalActivityRunner(); - - public ActivityManagerImpl(@NotNull Project project) { - super(project); - } - - @Override - public void build(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback) { - run(createModulesBuildActivity(true, modules), callback); - } - - @Override - public void rebuild(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback) { - run(createModulesBuildActivity(false, modules), callback); - } - - @Override - public void compile(@NotNull VirtualFile[] files, @Nullable ActivityStatusNotification callback) { - List buildActivities = Arrays.stream(files) - .collect(Collectors.groupingBy(file -> ProjectFileIndex.SERVICE.getInstance(myProject).getModuleForFile(file, false))) - .entrySet().stream() - .map(entry -> new ModuleFilesBuildActivityImpl(entry.getKey(), false, entry.getValue())) - .collect(Collectors.toList()); - - run(new ActivityList(buildActivities), callback); - } - - @Override - public void build(@NotNull Artifact[] artifacts, @Nullable ActivityStatusNotification callback) { - doBuild(artifacts, callback, true); - } - - @Override - public void rebuild(@NotNull Artifact[] artifacts, @Nullable ActivityStatusNotification callback) { - doBuild(artifacts, callback, false); - } - - @Override - public void buildAllModules(@Nullable ActivityStatusNotification callback) { - run(createAllModulesBuildActivity(true, myProject), callback); - } - - @Override - public void rebuildAllModules(@Nullable ActivityStatusNotification callback) { - run(createAllModulesBuildActivity(false, myProject), callback); - } - - @Override - public Activity createAllModulesBuildActivity(boolean isIncrementalBuild, Project project) { - return createModulesBuildActivity(isIncrementalBuild, ModuleManager.getInstance(project).getModules()); - } - - @Override - public Activity createModulesBuildActivity(boolean isIncrementalBuild, Module... modules) { - return modules.length == 1 - ? new ModuleBuildActivityImpl(modules[0], isIncrementalBuild) - : new ActivityList(map(list(modules), module -> new ModuleBuildActivityImpl(module, isIncrementalBuild))); - } - - @Override - public Activity createArtifactsBuildActivity(boolean isIncrementalBuild, Artifact... artifacts) { - return artifacts.length == 1 - ? new ArtifactBuildActivityImpl(artifacts[0], isIncrementalBuild) - : new ActivityList(map(list(artifacts), artifact -> new ArtifactBuildActivityImpl(artifact, isIncrementalBuild))); - } - - @Override - public void run(@NotNull Activity activity, @Nullable ActivityStatusNotification callback) { - run(new ActivityContext(), activity, callback); - } - - @Override - public void run(@NotNull ActivityContext context, @NotNull Activity activity, @Nullable ActivityStatusNotification callback) { - List>> toRun = new SmartList<>(); - - Consumer> activityClassifier = activities -> { - Map> toBuild = - activities.stream().collect(Collectors.groupingBy(_activity -> { - for (ActivityRunner runner : getActivityRunners()) { - if (runner.canRun(_activity)) return runner; - } - return myDefaultActivityRunner; - })); - for (Map.Entry> entry : toBuild.entrySet()) { - toRun.add(Pair.create(entry.getKey(), entry.getValue())); - } - }; - visitActivities(activity instanceof ActivityList ? (ActivityList)activity : Collections.singleton(activity), activityClassifier); - - AtomicInteger inProgressCounter = new AtomicInteger(toRun.size()); - AtomicInteger errorsCounter = new AtomicInteger(); - AtomicInteger warningsCounter = new AtomicInteger(); - AtomicBoolean abortedFlag = new AtomicBoolean(false); - ActivityStatusNotification chunkStatusNotification = callback == null ? null : new ActivityStatusNotification() { - @Override - public void finished(@NotNull ActivityExecutionResult executionResult) { - int inProgress = inProgressCounter.decrementAndGet(); - int allErrors = errorsCounter.addAndGet(executionResult.getErrors()); - int allWarnings = warningsCounter.addAndGet(executionResult.getWarnings()); - if (executionResult.isAborted()) { - abortedFlag.set(true); - } - if (inProgress == 0) { - callback.finished(new ActivityExecutionResult(abortedFlag.get(), allErrors, allWarnings)); - } - } - }; - - toRun.forEach(pair -> pair.first.run(myProject, context, chunkStatusNotification, pair.second)); - } - - private static void visitActivities(@NotNull Collection activities, - @NotNull Consumer> consumer) { - for (Activity child : activities) { - Collection _activities; - if (child instanceof AbstractActivity) { - _activities = ((AbstractActivity)child).getDependsOn(); - } - else if (child instanceof ActivityList) { - _activities = (ActivityList)child; - } - else { - _activities = Collections.singleton(child); - } - - visitActivities(_activities, consumer); - } - consumer.consume(activities); - } - - @NotNull - private static ActivityRunner[] getActivityRunners() { - return ActivityRunner.EP_NAME.getExtensions(); - } - - private void doBuild(@NotNull Artifact[] artifacts, @Nullable ActivityStatusNotification callback, boolean isIncrementalBuild) { - run(createArtifactsBuildActivity(isIncrementalBuild, artifacts), callback); - } -} 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 2d1c8ef58c35..47120db9f5e2 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/BuildArtifactAction.java @@ -20,7 +20,6 @@ import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonShortcuts; import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.activity.ActivityManager; import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; @@ -42,6 +41,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.impl.artifacts.ArtifactUtil; import com.intellij.packaging.impl.compiler.ArtifactsWorkspaceSettings; +import com.intellij.task.ProjectTaskManager; import com.intellij.ui.popup.list.ListPopupImpl; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.EmptyIcon; @@ -121,10 +121,10 @@ public class BuildArtifactAction extends DumbAwareAction { private static void doBuild(@NotNull Project project, final @NotNull List items, boolean rebuild) { final Artifact[] artifacts = getArtifacts(items, project); if (rebuild) { - ActivityManager.getInstance(project).rebuild(artifacts); + ProjectTaskManager.getInstance(project).rebuild(artifacts); } else { - ActivityManager.getInstance(project).build(artifacts); + ProjectTaskManager.getInstance(project).build(artifacts); } } diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java index 3cf076bb6a10..0464510799d0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java @@ -18,7 +18,6 @@ package com.intellij.compiler.actions; import com.intellij.compiler.CompilerConfiguration; import com.intellij.idea.ActionsBundle; import com.intellij.openapi.actionSystem.*; -import com.intellij.activity.ActivityManager; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.fileTypes.FileType; @@ -30,6 +29,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.task.ProjectTaskManager; import java.util.ArrayList; import java.util.List; @@ -38,12 +38,12 @@ public class CompileAction extends CompileActionBase { protected void doAction(DataContext dataContext, Project project) { final Module module = dataContext.getData(LangDataKeys.MODULE_CONTEXT); if (module != null) { - ActivityManager.getInstance(project).rebuild(module); + ProjectTaskManager.getInstance(project).rebuild(module); } else { VirtualFile[] files = getCompilableFiles(project, dataContext.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY)); if (files.length > 0) { - ActivityManager.getInstance(project).compile(files); + ProjectTaskManager.getInstance(project).compile(files); } } 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 2153ac8625cd..7dd02c5f0183 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.openapi.project.Project; +import com.intellij.task.ProjectTaskManager; public class CompileDirtyAction extends CompileActionBase { protected void doAction(DataContext dataContext, Project project) { - ActivityManager.getInstance(project).buildAllModules(); + ProjectTaskManager.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 9f47ed1932be..63e486200942 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileProjectAction.java @@ -15,22 +15,22 @@ */ 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.openapi.compiler.CompilerBundle; import com.intellij.openapi.project.Project; +import com.intellij.task.ProjectTaskManager; +import com.intellij.task.ProjectTaskNotification; +import com.intellij.task.ProjectTaskResult; import org.jetbrains.annotations.NotNull; public class CompileProjectAction extends CompileActionBase { protected void doAction(DataContext dataContext, final Project project) { - ActivityManager.getInstance(project).rebuildAllModules(new ActivityStatusNotification() { + ProjectTaskManager.getInstance(project).rebuildAllModules(new ProjectTaskNotification() { @Override - public void finished(@NotNull ActivityExecutionResult executionResult) { + public void finished(@NotNull ProjectTaskResult executionResult) { if (executionResult.isAborted() || project.isDisposed()) { return; } 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 5b6c8a3890b1..f97880d9dce7 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/MakeModuleAction.java @@ -15,12 +15,12 @@ */ package com.intellij.compiler.actions; -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; import com.intellij.openapi.project.Project; +import com.intellij.task.ProjectTaskManager; public class MakeModuleAction extends CompileActionBase { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.actions.MakeModuleAction"); @@ -36,7 +36,7 @@ public class MakeModuleAction extends CompileActionBase { modules = new Module[]{module}; } try { - ActivityManager.getInstance(project).build(modules); + ProjectTaskManager.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 20e7d078945a..14243c5f342f 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 @@ -15,7 +15,6 @@ */ package com.intellij.packaging.impl.run; -import com.intellij.activity.*; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.BeforeRunTaskProvider; import com.intellij.execution.RunManagerEx; @@ -37,6 +36,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.packaging.artifacts.*; +import com.intellij.task.*; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBUI; @@ -176,9 +176,9 @@ public class BuildArtifactsBeforeRunTaskProvider extends BeforeRunTaskProvider dependencies) { + public AbstractBuildTask(boolean isIncrementalBuild, @NotNull List dependencies) { super(dependencies); myIsIncrementalBuild = isIncrementalBuild; } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java b/java/compiler/impl/src/com/intellij/task/impl/AbstractProjectTask.java similarity index 70% rename from java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java rename to java/compiler/impl/src/com/intellij/task/impl/AbstractProjectTask.java index 08f8df3b63ed..e3548bacbba6 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/AbstractActivity.java +++ b/java/compiler/impl/src/com/intellij/task/impl/AbstractProjectTask.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.Activity; +import com.intellij.task.ProjectTask; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -25,24 +25,24 @@ import java.util.Collections; * @author Vladislav.Soroka * @since 7/13/2016 */ -public abstract class AbstractActivity implements Activity { +public abstract class AbstractProjectTask implements ProjectTask { @NotNull - private Collection myDependencies; + private Collection myDependencies; - public AbstractActivity() { + public AbstractProjectTask() { this(Collections.emptyList()); } - public AbstractActivity(@NotNull Collection dependencies) { + public AbstractProjectTask(@NotNull Collection dependencies) { myDependencies = dependencies; } @NotNull - public Collection getDependsOn() { + public Collection getDependsOn() { return myDependencies; } - public void setDependsOn(@NotNull Collection dependencies) { + public void setDependsOn(@NotNull Collection dependencies) { myDependencies = dependencies; } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/task/impl/ArtifactBuildTaskImpl.java similarity index 74% rename from java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java rename to java/compiler/impl/src/com/intellij/task/impl/ArtifactBuildTaskImpl.java index b2b7195205bd..5d7eead64169 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ArtifactBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/task/impl/ArtifactBuildTaskImpl.java @@ -13,20 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.ArtifactBuildActivity; import com.intellij.packaging.artifacts.Artifact; +import com.intellij.task.ArtifactBuildTask; import org.jetbrains.annotations.NotNull; /** * @author Vladislav.Soroka * @since 5/14/2016 */ -public class ArtifactBuildActivityImpl extends AbstractBuildActivity implements ArtifactBuildActivity { +public class ArtifactBuildTaskImpl extends AbstractBuildTask implements ArtifactBuildTask { private final Artifact myArtifact; - public ArtifactBuildActivityImpl(Artifact artifact, boolean isIncrementalBuild) { + public ArtifactBuildTaskImpl(Artifact artifact, boolean isIncrementalBuild) { super(isIncrementalBuild); myArtifact = artifact; } @@ -39,6 +39,6 @@ public class ArtifactBuildActivityImpl extends AbstractBuildActivity implements @NotNull @Override public String getPresentableName() { - return "Artifact '" + myArtifact.getName() + "' build activity"; + return "Artifact '" + myArtifact.getName() + "' build task"; } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ExecutionEnvironmentProviderImpl.java b/java/compiler/impl/src/com/intellij/task/impl/ExecutionEnvironmentProviderImpl.java similarity index 53% rename from java/compiler/impl/src/com/intellij/activity/impl/ExecutionEnvironmentProviderImpl.java rename to java/compiler/impl/src/com/intellij/task/impl/ExecutionEnvironmentProviderImpl.java index ea13fd14b3bf..59456a9f53a2 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ExecutionEnvironmentProviderImpl.java +++ b/java/compiler/impl/src/com/intellij/task/impl/ExecutionEnvironmentProviderImpl.java @@ -13,10 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.ActivityRunner; -import com.intellij.activity.RunActivity; import com.intellij.execution.ExecutionTarget; import com.intellij.execution.Executor; import com.intellij.execution.RunnerAndConfigurationSettings; @@ -26,6 +24,8 @@ import com.intellij.execution.configurations.RunnerSettings; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ExecutionEnvironmentProvider; import com.intellij.openapi.project.Project; +import com.intellij.task.ProjectTaskRunner; +import com.intellij.task.RunProjectTask; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,18 +37,18 @@ public class ExecutionEnvironmentProviderImpl implements ExecutionEnvironmentPro @Nullable @Override - public ExecutionEnvironment createActivityExecutionEnvironment(@NotNull Project project, - @NotNull RunProfile runProfile, - @NotNull Executor executor, - @NotNull ExecutionTarget target, - @Nullable RunnerSettings runnerSettings, - @Nullable ConfigurationPerRunnerSettings configurationSettings, - @Nullable RunnerAndConfigurationSettings settings) { + public ExecutionEnvironment createExecutionEnvironment(@NotNull Project project, + @NotNull RunProfile runProfile, + @NotNull Executor executor, + @NotNull ExecutionTarget target, + @Nullable RunnerSettings runnerSettings, + @Nullable ConfigurationPerRunnerSettings configurationSettings, + @Nullable RunnerAndConfigurationSettings settings) { - RunActivity runActivity = new RunActivityImpl(runProfile, executor, target, runnerSettings, configurationSettings, settings); - for (ActivityRunner activityRunner : ActivityRunner.EP_NAME.getExtensions()) { - if (activityRunner.canRun(runActivity)) { - return activityRunner.createActivityExecutionEnvironment(project, runActivity); + RunProjectTask runTask = new RunProjectTaskImpl(runProfile, executor, target, runnerSettings, configurationSettings, settings); + for (ProjectTaskRunner projectTaskRunner : ProjectTaskRunner.EP_NAME.getExtensions()) { + if (projectTaskRunner.canRun(runTask)) { + return projectTaskRunner.createExecutionEnvironment(project, runTask); } } return null; diff --git a/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java b/java/compiler/impl/src/com/intellij/task/impl/InternalProjectTaskRunner.java similarity index 57% rename from java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java rename to java/compiler/impl/src/com/intellij/task/impl/InternalProjectTaskRunner.java index 87330f629222..55513759142f 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/InternalActivityRunner.java +++ b/java/compiler/impl/src/com/intellij/task/impl/InternalProjectTaskRunner.java @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.*; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.impl.ExecutionManagerImpl; import com.intellij.execution.runners.ExecutionEnvironment; @@ -28,6 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.impl.compiler.ArtifactCompileScope; import com.intellij.packaging.impl.compiler.ArtifactsWorkspaceSettings; +import com.intellij.task.*; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -43,60 +43,60 @@ import java.util.stream.Stream; * @author Vladislav.Soroka * @since 5/11/2016 */ -public class InternalActivityRunner extends ActivityRunner { +public class InternalProjectTaskRunner extends ProjectTaskRunner { @Override public void run(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable ActivityStatusNotification callback, - @NotNull Collection activities) { + @NotNull ProjectTaskContext context, + @Nullable ProjectTaskNotification callback, + @NotNull Collection tasks) { CompileStatusNotification compileNotification = callback == null ? null : (aborted, errors, warnings, compileContext) -> - callback.finished(new ActivityExecutionResult(aborted, errors, warnings)); + callback.finished(new ProjectTaskResult(aborted, errors, warnings)); - Map, List> activityMap = groupBy(activities); - runModulesBuildActivities(project, context, compileNotification, activityMap); - runFilesBuildActivities(project, compileNotification, activityMap); - runArtifactsBuildActivities(project, context, compileNotification, activityMap); + Map, List> taskMap = groupBy(tasks); + runModulesBuildTasks(project, context, compileNotification, taskMap); + runFilesBuildTasks(project, compileNotification, taskMap); + runArtifactsBuildTasks(project, context, compileNotification, taskMap); } @Override - public boolean canRun(@NotNull Activity activity) { + public boolean canRun(@NotNull ProjectTask projectTask) { return true; } @Override - public ExecutionEnvironment createActivityExecutionEnvironment(@NotNull Project project, @NotNull RunActivity activity) { + public ExecutionEnvironment createExecutionEnvironment(@NotNull Project project, @NotNull RunProjectTask task) { return null; } - public static Map, List> groupBy(@NotNull Collection activities) { - return activities.stream().collect(Collectors.groupingBy(o -> { - if (o instanceof ModuleFilesBuildActivity) return ModuleFilesBuildActivity.class; - if (o instanceof ModuleBuildActivity) return ModuleBuildActivity.class; - if (o instanceof ArtifactBuildActivity) return ArtifactBuildActivity.class; + public static Map, List> groupBy(@NotNull Collection tasks) { + return tasks.stream().collect(Collectors.groupingBy(o -> { + if (o instanceof ModuleFilesBuildTask) return ModuleFilesBuildTask.class; + if (o instanceof ModuleBuildTask) return ModuleBuildTask.class; + if (o instanceof ArtifactBuildTask) return ArtifactBuildTask.class; return o.getClass(); })); } - private static void runModulesBuildActivities(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable CompileStatusNotification compileNotification, - @NotNull Map, List> activitiesMap) { - Collection buildActivities = activitiesMap.get(ModuleBuildActivity.class); + private static void runModulesBuildTasks(@NotNull Project project, + @NotNull ProjectTaskContext context, + @Nullable CompileStatusNotification compileNotification, + @NotNull Map, List> tasksMap) { + Collection buildTasks = tasksMap.get(ModuleBuildTask.class); - if (!ContainerUtil.isEmpty(buildActivities)) { + if (!ContainerUtil.isEmpty(buildTasks)) { List toMake = new SmartList<>(); List toCompile = new SmartList<>(); - for (Activity buildActivity : buildActivities) { - ModuleBuildActivity moduleBuildActivity = (ModuleBuildActivity)buildActivity; + for (ProjectTask buildProjectTask : buildTasks) { + ModuleBuildTask moduleBuildTask = (ModuleBuildTask)buildProjectTask; - if (moduleBuildActivity.isIncrementalBuild()) { - toMake.add(moduleBuildActivity.getModule()); + if (moduleBuildTask.isIncrementalBuild()) { + toMake.add(moduleBuildTask.getModule()); } else { - toCompile.add(moduleBuildActivity.getModule()); + toCompile.add(moduleBuildTask.getModule()); } } CompilerManager compilerManager = CompilerManager.getInstance(project); @@ -116,7 +116,7 @@ public class InternalActivityRunner extends ActivityRunner { private static CompileScope createScope(Project project, CompilerManager compilerManager, - ActivityContext context, + ProjectTaskContext context, Collection modules) { CompileScope scope = compilerManager.createModuleGroupCompileScope(project, modules.toArray(new Module[modules.size()]), true); RunConfiguration configuration = context.getRunConfiguration(); @@ -128,35 +128,35 @@ public class InternalActivityRunner extends ActivityRunner { return scope; } - private static void runFilesBuildActivities(@NotNull Project project, - @Nullable CompileStatusNotification compileNotification, - @NotNull Map, List> activitiesMap) { - Collection filesTargets = activitiesMap.get(ModuleFilesBuildActivity.class); + private static void runFilesBuildTasks(@NotNull Project project, + @Nullable CompileStatusNotification compileNotification, + @NotNull Map, List> tasksMap) { + Collection filesTargets = tasksMap.get(ModuleFilesBuildTask.class); if (!ContainerUtil.isEmpty(filesTargets)) { VirtualFile[] files = filesTargets.stream() - .flatMap(target -> Stream.of(ModuleFilesBuildActivity.class.cast(target).getFiles())) + .flatMap(target -> Stream.of(ModuleFilesBuildTask.class.cast(target).getFiles())) .toArray(VirtualFile[]::new); CompilerManager.getInstance(project).compile(files, compileNotification); } } - private static void runArtifactsBuildActivities(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable CompileStatusNotification compileNotification, - @NotNull Map, List> activitiesMap) { + private static void runArtifactsBuildTasks(@NotNull Project project, + @NotNull ProjectTaskContext context, + @Nullable CompileStatusNotification compileNotification, + @NotNull Map, List> tasksMap) { - Collection buildActivities = activitiesMap.get(ArtifactBuildActivity.class); - if (!ContainerUtil.isEmpty(buildActivities)) { + Collection buildTasks = tasksMap.get(ArtifactBuildTask.class); + if (!ContainerUtil.isEmpty(buildTasks)) { List toMake = new SmartList<>(); List toCompile = new SmartList<>(); - for (Activity buildActivity : buildActivities) { - ArtifactBuildActivity artifactBuildActivity = (ArtifactBuildActivity)buildActivity; + for (ProjectTask buildProjectTask : buildTasks) { + ArtifactBuildTask artifactBuildTask = (ArtifactBuildTask)buildProjectTask; - if (artifactBuildActivity.isIncrementalBuild()) { - toMake.add(artifactBuildActivity.getArtifact()); + if (artifactBuildTask.isIncrementalBuild()) { + toMake.add(artifactBuildTask.getArtifact()); } else { - toCompile.add(artifactBuildActivity.getArtifact()); + toCompile.add(artifactBuildTask.getArtifact()); } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/task/impl/ModuleBuildTaskImpl.java similarity index 74% rename from java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java rename to java/compiler/impl/src/com/intellij/task/impl/ModuleBuildTaskImpl.java index c388d7cf9cb3..6ae30a5512ef 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ModuleBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/task/impl/ModuleBuildTaskImpl.java @@ -13,21 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.ModuleBuildActivity; import com.intellij.openapi.module.Module; +import com.intellij.task.ModuleBuildTask; import org.jetbrains.annotations.NotNull; /** * @author Vladislav.Soroka * @since 5/11/2016 */ -public class ModuleBuildActivityImpl extends AbstractBuildActivity implements ModuleBuildActivity { +public class ModuleBuildTaskImpl extends AbstractBuildTask implements ModuleBuildTask { @NotNull private final Module myModule; - public ModuleBuildActivityImpl(@NotNull Module module, boolean isIncrementalBuild) { + public ModuleBuildTaskImpl(@NotNull Module module, boolean isIncrementalBuild) { super(isIncrementalBuild); myModule = module; } @@ -41,6 +41,6 @@ public class ModuleBuildActivityImpl extends AbstractBuildActivity implements Mo @NotNull @Override public String getPresentableName() { - return "Module '" + myModule.getName() + "' build activity"; + return "Module '" + myModule.getName() + "' build task"; } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java b/java/compiler/impl/src/com/intellij/task/impl/ModuleFilesBuildTaskImpl.java similarity index 71% rename from java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java rename to java/compiler/impl/src/com/intellij/task/impl/ModuleFilesBuildTaskImpl.java index c793588c67ae..d4e8ef3eb4ed 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ModuleFilesBuildActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/task/impl/ModuleFilesBuildTaskImpl.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.ModuleFilesBuildActivity; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.task.ModuleFilesBuildTask; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; @@ -28,15 +28,15 @@ import java.util.Collection; * @author Vladislav.Soroka * @since 5/14/2016 */ -public class ModuleFilesBuildActivityImpl extends ModuleBuildActivityImpl implements ModuleFilesBuildActivity { +public class ModuleFilesBuildTaskImpl extends ModuleBuildTaskImpl implements ModuleFilesBuildTask { private final VirtualFile[] myFiles; - public ModuleFilesBuildActivityImpl(Module module, boolean isIncrementalBuild, VirtualFile... files) { + public ModuleFilesBuildTaskImpl(Module module, boolean isIncrementalBuild, VirtualFile... files) { super(module, isIncrementalBuild); myFiles = files; } - public ModuleFilesBuildActivityImpl(Module module, boolean isIncrementalBuild, Collection files) { + public ModuleFilesBuildTaskImpl(Module module, boolean isIncrementalBuild, Collection files) { this(module, isIncrementalBuild, ArrayUtil.toObjectArray(files, VirtualFile.class)); } @@ -48,6 +48,6 @@ public class ModuleFilesBuildActivityImpl extends ModuleBuildActivityImpl implem @NotNull @Override public String getPresentableName() { - return "Files build activity '" + Arrays.toString(myFiles) + "'"; + return "Files build task '" + Arrays.toString(myFiles) + "'"; } } diff --git a/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java b/java/compiler/impl/src/com/intellij/task/impl/ProjectTaskList.java similarity index 79% rename from java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java rename to java/compiler/impl/src/com/intellij/task/impl/ProjectTaskList.java index 8c59620f816e..c6d84fac9f98 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/ActivityList.java +++ b/java/compiler/impl/src/com/intellij/task/impl/ProjectTaskList.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.Activity; +import com.intellij.task.ProjectTask; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -25,8 +25,8 @@ import java.util.Collection; * @author Vladislav.Soroka * @since 7/14/2016 */ -public class ActivityList extends ArrayList implements Activity { - public ActivityList(@NotNull Collection c) { +public class ProjectTaskList extends ArrayList implements ProjectTask { + public ProjectTaskList(@NotNull Collection c) { super(c); } diff --git a/java/compiler/impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java b/java/compiler/impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java new file mode 100644 index 000000000000..d40192e633e8 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/task/impl/ProjectTaskManagerImpl.java @@ -0,0 +1,183 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.task.impl; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packaging.artifacts.Artifact; +import com.intellij.task.*; +import com.intellij.util.Consumer; +import com.intellij.util.SmartList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +import static com.intellij.util.containers.ContainerUtil.list; +import static com.intellij.util.containers.ContainerUtil.map; + +/** + * @author Vladislav.Soroka + * @since 5/11/2016 + */ +public class ProjectTaskManagerImpl extends ProjectTaskManager { + + private final ProjectTaskRunner myDefaultProjectTaskRunner = new InternalProjectTaskRunner(); + + public ProjectTaskManagerImpl(@NotNull Project project) { + super(project); + } + + @Override + public void build(@NotNull Module[] modules, @Nullable ProjectTaskNotification callback) { + run(createModulesBuildTask(true, modules), callback); + } + + @Override + public void rebuild(@NotNull Module[] modules, @Nullable ProjectTaskNotification callback) { + run(createModulesBuildTask(false, modules), callback); + } + + @Override + public void compile(@NotNull VirtualFile[] files, @Nullable ProjectTaskNotification callback) { + List buildTasks = Arrays.stream(files) + .collect(Collectors.groupingBy(file -> ProjectFileIndex.SERVICE.getInstance(myProject).getModuleForFile(file, false))) + .entrySet().stream() + .map(entry -> new ModuleFilesBuildTaskImpl(entry.getKey(), false, entry.getValue())) + .collect(Collectors.toList()); + + run(new ProjectTaskList(buildTasks), callback); + } + + @Override + public void build(@NotNull Artifact[] artifacts, @Nullable ProjectTaskNotification callback) { + doBuild(artifacts, callback, true); + } + + @Override + public void rebuild(@NotNull Artifact[] artifacts, @Nullable ProjectTaskNotification callback) { + doBuild(artifacts, callback, false); + } + + @Override + public void buildAllModules(@Nullable ProjectTaskNotification callback) { + run(createAllModulesBuildTask(true, myProject), callback); + } + + @Override + public void rebuildAllModules(@Nullable ProjectTaskNotification callback) { + run(createAllModulesBuildTask(false, myProject), callback); + } + + @Override + public ProjectTask createAllModulesBuildTask(boolean isIncrementalBuild, Project project) { + return createModulesBuildTask(isIncrementalBuild, ModuleManager.getInstance(project).getModules()); + } + + @Override + public ProjectTask createModulesBuildTask(boolean isIncrementalBuild, Module... modules) { + return modules.length == 1 + ? new ModuleBuildTaskImpl(modules[0], isIncrementalBuild) + : new ProjectTaskList(map(list(modules), module -> new ModuleBuildTaskImpl(module, isIncrementalBuild))); + } + + @Override + public ProjectTask createArtifactsBuildTask(boolean isIncrementalBuild, Artifact... artifacts) { + return artifacts.length == 1 + ? new ArtifactBuildTaskImpl(artifacts[0], isIncrementalBuild) + : new ProjectTaskList(map(list(artifacts), artifact -> new ArtifactBuildTaskImpl(artifact, isIncrementalBuild))); + } + + @Override + public void run(@NotNull ProjectTask projectTask, @Nullable ProjectTaskNotification callback) { + run(new ProjectTaskContext(), projectTask, callback); + } + + @Override + public void run(@NotNull ProjectTaskContext context, @NotNull ProjectTask projectTask, @Nullable ProjectTaskNotification callback) { + List>> toRun = new SmartList<>(); + + Consumer> taskClassifier = tasks -> { + Map> toBuild = + tasks.stream().collect(Collectors.groupingBy(aTask -> { + for (ProjectTaskRunner runner : getTaskRunners()) { + if (runner.canRun(aTask)) return runner; + } + return myDefaultProjectTaskRunner; + })); + for (Map.Entry> entry : toBuild.entrySet()) { + toRun.add(Pair.create(entry.getKey(), entry.getValue())); + } + }; + visitTasks(projectTask instanceof ProjectTaskList ? (ProjectTaskList)projectTask : Collections.singleton(projectTask), taskClassifier); + + AtomicInteger inProgressCounter = new AtomicInteger(toRun.size()); + AtomicInteger errorsCounter = new AtomicInteger(); + AtomicInteger warningsCounter = new AtomicInteger(); + AtomicBoolean abortedFlag = new AtomicBoolean(false); + ProjectTaskNotification chunkStatusNotification = callback == null ? null : new ProjectTaskNotification() { + @Override + public void finished(@NotNull ProjectTaskResult executionResult) { + int inProgress = inProgressCounter.decrementAndGet(); + int allErrors = errorsCounter.addAndGet(executionResult.getErrors()); + int allWarnings = warningsCounter.addAndGet(executionResult.getWarnings()); + if (executionResult.isAborted()) { + abortedFlag.set(true); + } + if (inProgress == 0) { + callback.finished(new ProjectTaskResult(abortedFlag.get(), allErrors, allWarnings)); + } + } + }; + + toRun.forEach(pair -> pair.first.run(myProject, context, chunkStatusNotification, pair.second)); + } + + private static void visitTasks(@NotNull Collection tasks, + @NotNull Consumer> consumer) { + for (ProjectTask child : tasks) { + Collection taskDependencies; + if (child instanceof AbstractProjectTask) { + taskDependencies = ((AbstractProjectTask)child).getDependsOn(); + } + else if (child instanceof ProjectTaskList) { + taskDependencies = (ProjectTaskList)child; + } + else { + taskDependencies = Collections.singleton(child); + } + + visitTasks(taskDependencies, consumer); + } + consumer.consume(tasks); + } + + @NotNull + private static ProjectTaskRunner[] getTaskRunners() { + return ProjectTaskRunner.EP_NAME.getExtensions(); + } + + private void doBuild(@NotNull Artifact[] artifacts, @Nullable ProjectTaskNotification callback, boolean isIncrementalBuild) { + run(createArtifactsBuildTask(isIncrementalBuild, artifacts), callback); + } +} diff --git a/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java b/java/compiler/impl/src/com/intellij/task/impl/RunProjectTaskImpl.java similarity index 77% rename from java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java rename to java/compiler/impl/src/com/intellij/task/impl/RunProjectTaskImpl.java index e5267435bdf6..c18d782c72dd 100644 --- a/java/compiler/impl/src/com/intellij/activity/impl/RunActivityImpl.java +++ b/java/compiler/impl/src/com/intellij/task/impl/RunProjectTaskImpl.java @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity.impl; +package com.intellij.task.impl; -import com.intellij.activity.RunActivity; import com.intellij.execution.ExecutionTarget; import com.intellij.execution.Executor; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationPerRunnerSettings; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunnerSettings; +import com.intellij.task.RunProjectTask; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,7 +29,7 @@ import org.jetbrains.annotations.Nullable; * @author Vladislav.Soroka * @since 7/13/2016 */ -public class RunActivityImpl extends AbstractActivity implements RunActivity { +public class RunProjectTaskImpl extends AbstractProjectTask implements RunProjectTask { @NotNull private final RunProfile myRunProfile; @Nullable private Executor myExecutor; @Nullable private ExecutionTarget myTarget; @@ -37,16 +37,16 @@ public class RunActivityImpl extends AbstractActivity implements RunActivity { @Nullable private ConfigurationPerRunnerSettings myConfigurationSettings; @Nullable private RunnerAndConfigurationSettings mySettings; - public RunActivityImpl(@NotNull RunProfile runProfile) { + public RunProjectTaskImpl(@NotNull RunProfile runProfile) { myRunProfile = runProfile; } - public RunActivityImpl(@NotNull RunProfile runProfile, - @NotNull Executor executor, - @NotNull ExecutionTarget target, - @Nullable RunnerSettings runnerSettings, - @Nullable ConfigurationPerRunnerSettings configurationSettings, - @Nullable RunnerAndConfigurationSettings settings) { + public RunProjectTaskImpl(@NotNull RunProfile runProfile, + @NotNull Executor executor, + @NotNull ExecutionTarget target, + @Nullable RunnerSettings runnerSettings, + @Nullable ConfigurationPerRunnerSettings configurationSettings, + @Nullable RunnerAndConfigurationSettings settings) { myRunProfile = runProfile; myExecutor = executor; myTarget = target; @@ -94,6 +94,6 @@ public class RunActivityImpl extends AbstractActivity implements RunActivity { @NotNull @Override public String getPresentableName() { - return "Run activity '" + myRunProfile.getName() + "'"; + return "Run task '" + myRunProfile.getName() + "'"; } } diff --git a/java/compiler/openapi/src/com/intellij/activity/ArtifactBuildActivity.java b/java/compiler/openapi/src/com/intellij/task/ArtifactBuildTask.java similarity index 88% rename from java/compiler/openapi/src/com/intellij/activity/ArtifactBuildActivity.java rename to java/compiler/openapi/src/com/intellij/task/ArtifactBuildTask.java index 79fed0a773d3..7c0fb3cdc0a9 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ArtifactBuildActivity.java +++ b/java/compiler/openapi/src/com/intellij/task/ArtifactBuildTask.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.packaging.artifacts.Artifact; @@ -21,6 +21,6 @@ import com.intellij.packaging.artifacts.Artifact; * @author Vladislav.Soroka * @since 7/18/2016 */ -public interface ArtifactBuildActivity extends BuildActivity { +public interface ArtifactBuildTask extends BuildTask { Artifact getArtifact(); } diff --git a/java/compiler/openapi/src/com/intellij/activity/BuildActivity.java b/java/compiler/openapi/src/com/intellij/task/BuildTask.java similarity index 89% rename from java/compiler/openapi/src/com/intellij/activity/BuildActivity.java rename to java/compiler/openapi/src/com/intellij/task/BuildTask.java index 8f1bc4d37c0c..3ebec3485e96 100644 --- a/java/compiler/openapi/src/com/intellij/activity/BuildActivity.java +++ b/java/compiler/openapi/src/com/intellij/task/BuildTask.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; /** * @author Vladislav.Soroka * @since 5/11/2016 */ -public interface BuildActivity extends Activity { +public interface BuildTask extends ProjectTask { boolean isIncrementalBuild(); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ModuleBuildActivity.java b/java/compiler/openapi/src/com/intellij/task/ModuleBuildTask.java similarity index 89% rename from java/compiler/openapi/src/com/intellij/activity/ModuleBuildActivity.java rename to java/compiler/openapi/src/com/intellij/task/ModuleBuildTask.java index 3f69062aed79..ad08c7d474f1 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ModuleBuildActivity.java +++ b/java/compiler/openapi/src/com/intellij/task/ModuleBuildTask.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.openapi.module.Module; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull; * @author Vladislav.Soroka * @since 7/18/2016 */ -public interface ModuleBuildActivity extends BuildActivity { +public interface ModuleBuildTask extends BuildTask { @NotNull Module getModule(); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ModuleFilesBuildActivity.java b/java/compiler/openapi/src/com/intellij/task/ModuleFilesBuildTask.java similarity index 87% rename from java/compiler/openapi/src/com/intellij/activity/ModuleFilesBuildActivity.java rename to java/compiler/openapi/src/com/intellij/task/ModuleFilesBuildTask.java index 5379e17ded3f..1347ae55d380 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ModuleFilesBuildActivity.java +++ b/java/compiler/openapi/src/com/intellij/task/ModuleFilesBuildTask.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.openapi.vfs.VirtualFile; @@ -21,6 +21,6 @@ import com.intellij.openapi.vfs.VirtualFile; * @author Vladislav.Soroka * @since 7/18/2016 */ -public interface ModuleFilesBuildActivity extends ModuleBuildActivity { +public interface ModuleFilesBuildTask extends ModuleBuildTask { VirtualFile[] getFiles(); } diff --git a/java/compiler/openapi/src/com/intellij/activity/Activity.java b/java/compiler/openapi/src/com/intellij/task/ProjectTask.java similarity index 79% rename from java/compiler/openapi/src/com/intellij/activity/Activity.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTask.java index 6c511ef4f4cb..0e65a0c9c810 100644 --- a/java/compiler/openapi/src/com/intellij/activity/Activity.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTask.java @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import org.jetbrains.annotations.NotNull; /** - * An {@link Activity} represents a single atomic piece of work for IDE workflow, such as 'Make Project' or run configurations. + * An {@link ProjectTask} represents a single atomic piece of work for IDE workflow, such as 'Make Project' or run configurations. * * @author Vladislav.Soroka * @since 7/13/2016 */ -public interface Activity { +public interface ProjectTask { @NotNull String getPresentableName(); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityContext.java b/java/compiler/openapi/src/com/intellij/task/ProjectTaskContext.java similarity index 81% rename from java/compiler/openapi/src/com/intellij/activity/ActivityContext.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTaskContext.java index 2921ff653a5c..8330abf35311 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityContext.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTaskContext.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.execution.configurations.RunConfiguration; import org.jetbrains.annotations.Nullable; @@ -22,20 +22,20 @@ import org.jetbrains.annotations.Nullable; * @author Vladislav.Soroka * @since 7/15/2016 */ -public class ActivityContext { +public class ProjectTaskContext { @Nullable private Object mySessionId; @Nullable private RunConfiguration myRunConfiguration; - public ActivityContext() { + public ProjectTaskContext() { } - public ActivityContext(@Nullable Object sessionId) { + public ProjectTaskContext(@Nullable Object sessionId) { mySessionId = sessionId; } - public ActivityContext(@Nullable Object sessionId, @Nullable RunConfiguration runConfiguration) { + public ProjectTaskContext(@Nullable Object sessionId, @Nullable RunConfiguration runConfiguration) { mySessionId = sessionId; myRunConfiguration = runConfiguration; } diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityManager.java b/java/compiler/openapi/src/com/intellij/task/ProjectTaskManager.java similarity index 62% rename from java/compiler/openapi/src/com/intellij/activity/ActivityManager.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTaskManager.java index cb51f95779a3..fe3d8474f128 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityManager.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTaskManager.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.module.Module; @@ -30,67 +30,69 @@ import org.jetbrains.annotations.Nullable; * @author Vladislav.Soroka * @since 4/29/2016 */ -public abstract class ActivityManager { +public abstract class ProjectTaskManager { protected final @NotNull Project myProject; - public ActivityManager(@NotNull Project project) { + public ProjectTaskManager(@NotNull Project project) { myProject = project; } - public static ActivityManager getInstance(Project project) { - return ServiceManager.getService(project, ActivityManager.class); + public static ProjectTaskManager getInstance(Project project) { + return ServiceManager.getService(project, ProjectTaskManager.class); } - public abstract void run(@NotNull Activity activity, @Nullable ActivityStatusNotification callback); + public abstract void run(@NotNull ProjectTask projectTask, @Nullable ProjectTaskNotification callback); - public abstract void run(@NotNull ActivityContext context, @NotNull Activity activity, @Nullable ActivityStatusNotification callback); + public abstract void run(@NotNull ProjectTaskContext context, + @NotNull ProjectTask projectTask, + @Nullable ProjectTaskNotification callback); - public abstract void buildAllModules(@Nullable ActivityStatusNotification callback); + public abstract void buildAllModules(@Nullable ProjectTaskNotification callback); public void buildAllModules() { buildAllModules(null); } - public abstract void rebuildAllModules(@Nullable ActivityStatusNotification callback); + public abstract void rebuildAllModules(@Nullable ProjectTaskNotification callback); public void rebuildAllModules() { rebuildAllModules(null); } - public abstract void build(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback); + public abstract void build(@NotNull Module[] modules, @Nullable ProjectTaskNotification callback); public void build(@NotNull Module... modules) { build(modules, null); } - public abstract void rebuild(@NotNull Module[] modules, @Nullable ActivityStatusNotification callback); + public abstract void rebuild(@NotNull Module[] modules, @Nullable ProjectTaskNotification callback); public void rebuild(@NotNull Module... modules) { rebuild(modules, null); } - public abstract void compile(@NotNull VirtualFile[] files, @Nullable ActivityStatusNotification callback); + public abstract void compile(@NotNull VirtualFile[] files, @Nullable ProjectTaskNotification callback); public void compile(@NotNull VirtualFile... files) { compile(files, null); } - public abstract void build(@NotNull Artifact[] artifacts, @Nullable ActivityStatusNotification callback); + public abstract void build(@NotNull Artifact[] artifacts, @Nullable ProjectTaskNotification callback); public void build(@NotNull Artifact[] artifacts) { build(artifacts, null); } - public abstract void rebuild(@NotNull Artifact[] artifacts, @Nullable ActivityStatusNotification callback); + public abstract void rebuild(@NotNull Artifact[] artifacts, @Nullable ProjectTaskNotification callback); public void rebuild(@NotNull Artifact... artifacts) { rebuild(artifacts, null); } - public abstract Activity createAllModulesBuildActivity(boolean isIncrementalBuild, Project project); + public abstract ProjectTask createAllModulesBuildTask(boolean isIncrementalBuild, Project project); - public abstract Activity createModulesBuildActivity(boolean isIncrementalBuild, Module... modules); + public abstract ProjectTask createModulesBuildTask(boolean isIncrementalBuild, Module... modules); - public abstract Activity createArtifactsBuildActivity(boolean isIncrementalBuild, Artifact... artifacts); + public abstract ProjectTask createArtifactsBuildTask(boolean isIncrementalBuild, Artifact... artifacts); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java b/java/compiler/openapi/src/com/intellij/task/ProjectTaskNotification.java similarity index 82% rename from java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTaskNotification.java index 81c499e3f44f..a7cef0c7f8cc 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityStatusNotification.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTaskNotification.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import org.jetbrains.annotations.NotNull; @@ -21,9 +21,9 @@ import org.jetbrains.annotations.NotNull; * @author Vladislav.Soroka * @since 4/29/2016 */ -public interface ActivityStatusNotification { +public interface ProjectTaskNotification { /** - * @param executionResult provides aggregated information about activity execution + * @param executionResult provides aggregated information about the {@link ProjectTask} execution */ - void finished(@NotNull ActivityExecutionResult executionResult); + void finished(@NotNull ProjectTaskResult executionResult); } diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityExecutionResult.java b/java/compiler/openapi/src/com/intellij/task/ProjectTaskResult.java similarity index 87% rename from java/compiler/openapi/src/com/intellij/activity/ActivityExecutionResult.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTaskResult.java index 75bb76ba49c9..43c666f54b3c 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityExecutionResult.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTaskResult.java @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; /** * @author Vladislav.Soroka * @since 8/5/2016 */ -public class ActivityExecutionResult { +public class ProjectTaskResult { private final boolean aborted; private final int errors; private final int warnings; - public ActivityExecutionResult(boolean aborted, int errors, int warnings) { + public ProjectTaskResult(boolean aborted, int errors, int warnings) { this.aborted = aborted; this.errors = errors; this.warnings = warnings; diff --git a/java/compiler/openapi/src/com/intellij/activity/ActivityRunner.java b/java/compiler/openapi/src/com/intellij/task/ProjectTaskRunner.java similarity index 54% rename from java/compiler/openapi/src/com/intellij/activity/ActivityRunner.java rename to java/compiler/openapi/src/com/intellij/task/ProjectTaskRunner.java index b23082b48ba1..5d1eec85c138 100644 --- a/java/compiler/openapi/src/com/intellij/activity/ActivityRunner.java +++ b/java/compiler/openapi/src/com/intellij/task/ProjectTaskRunner.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.extensions.ExtensionPointName; @@ -25,29 +25,26 @@ import java.util.Arrays; import java.util.Collection; /** - * TODO - * get compiled files status - * * @author Vladislav.Soroka * @since 4/29/2016 */ -public abstract class ActivityRunner { +public abstract class ProjectTaskRunner { - public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.activityRunner"); + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.projectTaskRunner"); public abstract void run(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable ActivityStatusNotification callback, - @NotNull Collection activities); + @NotNull ProjectTaskContext context, + @Nullable ProjectTaskNotification callback, + @NotNull Collection tasks); public void run(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable ActivityStatusNotification callback, - @NotNull Activity... activities) { - run(project, context, callback, Arrays.asList(activities)); + @NotNull ProjectTaskContext context, + @Nullable ProjectTaskNotification callback, + @NotNull ProjectTask... tasks) { + run(project, context, callback, Arrays.asList(tasks)); } - public abstract boolean canRun(@NotNull Activity activity); + public abstract boolean canRun(@NotNull ProjectTask projectTask); - public abstract ExecutionEnvironment createActivityExecutionEnvironment(@NotNull Project project, @NotNull RunActivity activity); + public abstract ExecutionEnvironment createExecutionEnvironment(@NotNull Project project, @NotNull RunProjectTask task); } diff --git a/java/compiler/openapi/src/com/intellij/activity/RunActivity.java b/java/compiler/openapi/src/com/intellij/task/RunProjectTask.java similarity index 94% rename from java/compiler/openapi/src/com/intellij/activity/RunActivity.java rename to java/compiler/openapi/src/com/intellij/task/RunProjectTask.java index ecb2905d85b8..de5402f87560 100644 --- a/java/compiler/openapi/src/com/intellij/activity/RunActivity.java +++ b/java/compiler/openapi/src/com/intellij/task/RunProjectTask.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.activity; +package com.intellij.task; import com.intellij.execution.ExecutionTarget; import com.intellij.execution.Executor; @@ -28,7 +28,7 @@ import org.jetbrains.annotations.Nullable; * @author Vladislav.Soroka * @since 5/11/2016 */ -public interface RunActivity extends Activity { +public interface RunProjectTask extends ProjectTask { @NotNull RunProfile getRunProfile(); 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 db6ef95bde3c..6aaf886ef996 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -15,7 +15,6 @@ */ package com.intellij.compiler.options; -import com.intellij.activity.*; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.BeforeRunTaskProvider; import com.intellij.execution.ExecutionBundle; @@ -36,6 +35,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; +import com.intellij.task.*; import com.intellij.util.concurrency.Semaphore; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -138,8 +138,8 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider { - Activity activity; + ProjectTask projectTask; Object sessionId = ExecutionManagerImpl.EXECUTION_SESSION_ID_KEY.get(env); - final ActivityManager activityManager = ActivityManager.getInstance(myProject); + final ProjectTaskManager projectTaskManager = ProjectTaskManager.getInstance(myProject); if (forceMakeProject) { // user explicitly requested whole-project make - activity = activityManager.createAllModulesBuildActivity(true, myProject); + projectTask = projectTaskManager.createAllModulesBuildTask(true, myProject); } else { final Module[] modules = runConfiguration.getModules(); @@ -164,15 +164,15 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider - + diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentBuilder.java index f47d4542735f..9350ccaa7b77 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentBuilder.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentBuilder.java @@ -15,7 +15,6 @@ */ package org.jetbrains.plugins.gradle.execution.build; -import com.intellij.activity.RunActivity; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.application.ApplicationConfiguration; import com.intellij.execution.configurations.JavaParameters; @@ -30,6 +29,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.psi.PsiClass; +import com.intellij.task.RunProjectTask; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,10 +48,10 @@ import java.util.Collections; public class GradleApplicationEnvironmentBuilder { @Nullable - public ExecutionEnvironment build(@NotNull Project project, @NotNull RunActivity activity) { - if (!(activity.getRunProfile() instanceof ApplicationConfiguration)) return null; + public ExecutionEnvironment build(@NotNull Project project, @NotNull RunProjectTask runProjectTask) { + if (!(runProjectTask.getRunProfile() instanceof ApplicationConfiguration)) return null; - ApplicationConfiguration applicationConfiguration = (ApplicationConfiguration)activity.getRunProfile(); + ApplicationConfiguration applicationConfiguration = (ApplicationConfiguration)runProjectTask.getRunProfile(); PsiClass mainClass = applicationConfiguration.getMainClass(); if(mainClass == null) return null; @@ -79,7 +79,7 @@ public class GradleApplicationEnvironmentBuilder { final String runAppTaskName = "run " + mainClass.getName(); taskSettings.setTaskNames(Collections.singletonList(runAppTaskName)); - String executorId = activity.getExecutor() == null ? DefaultRunExecutor.EXECUTOR_ID : activity.getExecutor().getId(); + String executorId = runProjectTask.getExecutor() == null ? DefaultRunExecutor.EXECUTOR_ID : runProjectTask.getExecutor().getId(); ExecutionEnvironment environment = ExternalSystemUtil.createExecutionEnvironment(project, GradleConstants.SYSTEM_ID, taskSettings, executorId); if (environment != null) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleArtifactBuildTasksProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleArtifactBuildTasksProvider.java index aee17715176f..ad36f6cfc794 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleArtifactBuildTasksProvider.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleArtifactBuildTasksProvider.java @@ -15,9 +15,9 @@ */ package org.jetbrains.plugins.gradle.execution.build; -import com.intellij.activity.ArtifactBuildActivity; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.externalSystem.model.execution.ExternalTaskPojo; +import com.intellij.task.ArtifactBuildTask; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; @@ -29,9 +29,9 @@ public interface GradleArtifactBuildTasksProvider { ExtensionPointName EP_NAME = ExtensionPointName.create("org.jetbrains.plugins.gradle.artifactBuildTasksProvider"); - boolean isApplicable(@NotNull ArtifactBuildActivity artifactBuildActivity); + boolean isApplicable(@NotNull ArtifactBuildTask artifactBuildTask); - void addArtifactsTargetsBuildTasks(@NotNull ArtifactBuildActivity artifactBuildActivity, + void addArtifactsTargetsBuildTasks(@NotNull ArtifactBuildTask artifactBuildTask, @NotNull Consumer cleanTasksConsumer, @NotNull Consumer buildTasksConsumer); } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleActivityRunner.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleProjectTaskRunner.java similarity index 70% rename from plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleActivityRunner.java rename to plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleProjectTaskRunner.java index 6efbfeaaef87..a1bcbb2e76ee 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleActivityRunner.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleProjectTaskRunner.java @@ -15,8 +15,6 @@ */ package org.jetbrains.plugins.gradle.execution.build; -import com.intellij.activity.*; -import com.intellij.activity.impl.InternalActivityRunner; import com.intellij.execution.application.ApplicationConfiguration; import com.intellij.execution.configurations.JavaRunConfigurationModule; import com.intellij.execution.configurations.RunProfile; @@ -33,6 +31,8 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.task.*; +import com.intellij.task.impl.InternalProjectTaskRunner; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; @@ -58,23 +58,23 @@ import java.util.concurrent.atomic.AtomicInteger; * @author Vladislav.Soroka * @since 5/11/2016 */ -public class GradleActivityRunner extends ActivityRunner { +public class GradleProjectTaskRunner extends ProjectTaskRunner { @Override public void run(@NotNull Project project, - @NotNull ActivityContext context, - @Nullable ActivityStatusNotification callback, - @NotNull Collection activities) { + @NotNull ProjectTaskContext context, + @Nullable ProjectTaskNotification callback, + @NotNull Collection tasks) { String executionName = "Gradle build"; MultiMap buildTasksMap = MultiMap.createLinkedSet(); MultiMap cleanTasksMap = MultiMap.createLinkedSet(); - Map, List> activityMap = InternalActivityRunner.groupBy(activities); + Map, List> taskMap = InternalProjectTaskRunner.groupBy(tasks); - addModulesBuildActivityTasks(activityMap.get(ModuleBuildActivity.class), cleanTasksMap, buildTasksMap); + addModulesBuildTasks(taskMap.get(ModuleBuildTask.class), cleanTasksMap, buildTasksMap); // TODO there should be 'gradle' way to build files instead of related modules entirely - addModulesBuildActivityTasks(activityMap.get(ModuleFilesBuildActivity.class), cleanTasksMap, buildTasksMap); - addArtifactsBuildActivityTasks(activityMap.get(ArtifactBuildActivity.class), cleanTasksMap, buildTasksMap); + addModulesBuildTasks(taskMap.get(ModuleFilesBuildTask.class), cleanTasksMap, buildTasksMap); + addArtifactsBuildTasks(taskMap.get(ArtifactBuildTask.class), cleanTasksMap, buildTasksMap); // TODO send a message if nothing to build Set rootPaths = buildTasksMap.keySet(); @@ -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(new ActivityExecutionResult(false, errors, 0)); + callback.finished(new ProjectTaskResult(false, errors, 0)); } } }; @@ -120,22 +120,22 @@ public class GradleActivityRunner extends ActivityRunner { } @Override - public boolean canRun(@NotNull Activity activity) { + public boolean canRun(@NotNull ProjectTask projectTask) { if (!GradleSystemRunningSettings.getInstance().isUseGradleAwareMake()) return false; - if (activity instanceof ModuleBuildActivity) { - return ExternalSystemApiUtil.isExternalSystemAwareModule(GradleConstants.SYSTEM_ID, ((ModuleBuildActivity)activity).getModule()); + if (projectTask instanceof ModuleBuildTask) { + return ExternalSystemApiUtil.isExternalSystemAwareModule(GradleConstants.SYSTEM_ID, ((ModuleBuildTask)projectTask).getModule()); } - if (activity instanceof ArtifactBuildActivity) { - ArtifactBuildActivity artifactBuildActivity = (ArtifactBuildActivity)activity; + if (projectTask instanceof ArtifactBuildTask) { + ArtifactBuildTask artifactBuildTask = (ArtifactBuildTask)projectTask; for (GradleArtifactBuildTasksProvider buildTasksProvider : GradleArtifactBuildTasksProvider.EP_NAME.getExtensions()) { - if (buildTasksProvider.isApplicable(artifactBuildActivity)) return true; + if (buildTasksProvider.isApplicable(artifactBuildTask)) return true; } } - if (activity instanceof RunActivity) { + if (projectTask instanceof RunProjectTask) { if (!GradleSystemRunningSettings.getInstance().isUseGradleAwareMake()) return false; - RunProfile runProfile = ((RunActivity)activity).getRunProfile(); + RunProfile runProfile = ((RunProjectTask)projectTask).getRunProfile(); if (runProfile instanceof ApplicationConfiguration) { JavaRunConfigurationModule module = ((ApplicationConfiguration)runProfile).getConfigurationModule(); return ExternalSystemApiUtil.isExternalSystemAwareModule(GradleConstants.SYSTEM_ID, module.getModule()); @@ -146,24 +146,24 @@ public class GradleActivityRunner extends ActivityRunner { @Override - public ExecutionEnvironment createActivityExecutionEnvironment(@NotNull Project project, @NotNull RunActivity activity) { - if (activity.getRunProfile() instanceof ApplicationConfiguration) { - return new GradleApplicationEnvironmentBuilder().build(project, activity); + public ExecutionEnvironment createExecutionEnvironment(@NotNull Project project, @NotNull RunProjectTask task) { + if (task.getRunProfile() instanceof ApplicationConfiguration) { + return new GradleApplicationEnvironmentBuilder().build(project, task); } return null; } - private static void addModulesBuildActivityTasks(@Nullable Collection activities, - @NotNull MultiMap cleanTasksMap, - @NotNull MultiMap buildTasksMap) { - if (ContainerUtil.isEmpty(activities)) return; + private static void addModulesBuildTasks(@Nullable Collection projectTasks, + @NotNull MultiMap cleanTasksMap, + @NotNull MultiMap buildTasksMap) { + if (ContainerUtil.isEmpty(projectTasks)) return; final CachedModuleDataFinder moduleDataFinder = new CachedModuleDataFinder(); - for (Activity activity : activities) { - if (!(activity instanceof ModuleBuildActivity)) continue; + for (ProjectTask projectTask : projectTasks) { + if (!(projectTask instanceof ModuleBuildTask)) continue; - ModuleBuildActivity moduleBuildActivity = (ModuleBuildActivity)activity; - Module module = moduleBuildActivity.getModule(); + ModuleBuildTask moduleBuildTask = (ModuleBuildTask)projectTask; + Module module = moduleBuildTask.getModule(); final String rootProjectPath = ExternalSystemApiUtil.getExternalRootProjectPath(module); if (rootProjectPath == null) continue; @@ -176,7 +176,7 @@ public class GradleActivityRunner extends ActivityRunner { final DataNode moduleDataNode = moduleDataFinder.findModuleData(module); if (moduleDataNode == null) continue; - List tasks = ContainerUtil.mapNotNull(ExternalSystemApiUtil.findAll(moduleDataNode, ProjectKeys.TASK), + List gradleTasks = ContainerUtil.mapNotNull(ExternalSystemApiUtil.findAll(moduleDataNode, ProjectKeys.TASK), node -> node.getData().isInherited() ? null : node.getData().getName()); Collection cleanRootTasks = cleanTasksMap.getModifiable(rootProjectPath); @@ -191,15 +191,15 @@ public class GradleActivityRunner extends ActivityRunner { gradlePath = projectId.substring(firstColonIndex, lastColonIndex); String sourceSetName = GradleProjectResolverUtil.getSourceSetName(module); - String task = StringUtil.isEmpty(sourceSetName) || "main".equals(sourceSetName) ? "classes" : sourceSetName + "Classes"; - if (tasks.contains(task)) { - if (!moduleBuildActivity.isIncrementalBuild()) { - cleanRootTasks.add(gradlePath + ":clean" + StringUtil.capitalize(task)); + String gradleTask = StringUtil.isEmpty(sourceSetName) || "main".equals(sourceSetName) ? "classes" : sourceSetName + "Classes"; + if (gradleTasks.contains(gradleTask)) { + if (!moduleBuildTask.isIncrementalBuild()) { + cleanRootTasks.add(gradlePath + ":clean" + StringUtil.capitalize(gradleTask)); } - buildRootTasks.add(gradlePath + ":" + task); + buildRootTasks.add(gradlePath + ":" + gradleTask); } else if ("main".equals(sourceSetName) || "test".equals(sourceSetName)) { - if (!moduleBuildActivity.isIncrementalBuild()) { + if (!moduleBuildTask.isIncrementalBuild()) { cleanRootTasks.add(gradlePath + ":clean"); } buildRootTasks.add(gradlePath + ":build"); @@ -207,21 +207,21 @@ public class GradleActivityRunner extends ActivityRunner { } else { gradlePath = projectId.charAt(0) == ':' ? projectId : ""; - if (!moduleBuildActivity.isIncrementalBuild()) { - if (tasks.contains("classes")) { + if (!moduleBuildTask.isIncrementalBuild()) { + if (gradleTasks.contains("classes")) { cleanRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":cleanClasses" : gradlePath + ":cleanClasses")); } - else if(tasks.contains("clean")){ + else if (gradleTasks.contains("clean")) { cleanRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "clean" : gradlePath + ":clean")); } else { cleanTasksMap.getModifiable(externalProjectPath).add("clean"); } } - if (tasks.contains("classes")) { + if (gradleTasks.contains("classes")) { buildRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? ":classes" : gradlePath + ":classes")); } - else if (tasks.contains("build")) { + else if (gradleTasks.contains("build")) { buildRootTasks.add((StringUtil.equals(rootProjectPath, externalProjectPath) ? "build" : gradlePath + ":build")); } else { @@ -231,19 +231,19 @@ public class GradleActivityRunner extends ActivityRunner { } } - private static void addArtifactsBuildActivityTasks(@Nullable Collection activities, - @NotNull MultiMap cleanTasksMap, - @NotNull MultiMap buildTasksMap) { - if (ContainerUtil.isEmpty(activities)) return; + private static void addArtifactsBuildTasks(@Nullable Collection tasks, + @NotNull MultiMap cleanTasksMap, + @NotNull MultiMap buildTasksMap) { + if (ContainerUtil.isEmpty(tasks)) return; - for (Activity activity : activities) { - if (!(activity instanceof ArtifactBuildActivity)) continue; + for (ProjectTask projectTask : tasks) { + if (!(projectTask instanceof ArtifactBuildTask)) continue; - ArtifactBuildActivity artifactBuildActivity = (ArtifactBuildActivity)activity; + ArtifactBuildTask artifactBuildTask = (ArtifactBuildTask)projectTask; for (GradleArtifactBuildTasksProvider buildTasksProvider : GradleArtifactBuildTasksProvider.EP_NAME.getExtensions()) { - if (buildTasksProvider.isApplicable(artifactBuildActivity)) { + if (buildTasksProvider.isApplicable(artifactBuildTask)) { buildTasksProvider.addArtifactsTargetsBuildTasks( - artifactBuildActivity, + artifactBuildTask, task -> cleanTasksMap.putValue(task.getLinkedExternalProjectPath(), task.getName()), task -> buildTasksMap.putValue(task.getLinkedExternalProjectPath(), task.getName()) ); diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 713d6941b75e..8a6ba4c02ac9 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -197,7 +197,7 @@ - + diff --git a/resources/src/idea/RichPlatformPlugin.xml b/resources/src/idea/RichPlatformPlugin.xml index 3c8bf4242976..bdb74e98958d 100644 --- a/resources/src/idea/RichPlatformPlugin.xml +++ b/resources/src/idea/RichPlatformPlugin.xml @@ -172,11 +172,11 @@ - + + serviceImplementation="com.intellij.task.impl.ExecutionEnvironmentProviderImpl"/>