mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
gradle: es aware run/make, rename Activity => ProjectTask
This commit is contained in:
@@ -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<ModuleFilesBuildActivity> 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<Pair<ActivityRunner, Collection<? extends Activity>>> toRun = new SmartList<>();
|
||||
|
||||
Consumer<Collection<? extends Activity>> activityClassifier = activities -> {
|
||||
Map<ActivityRunner, ? extends List<? extends Activity>> toBuild =
|
||||
activities.stream().collect(Collectors.groupingBy(_activity -> {
|
||||
for (ActivityRunner runner : getActivityRunners()) {
|
||||
if (runner.canRun(_activity)) return runner;
|
||||
}
|
||||
return myDefaultActivityRunner;
|
||||
}));
|
||||
for (Map.Entry<ActivityRunner, ? extends List<? extends Activity>> 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<? extends Activity> activities,
|
||||
@NotNull Consumer<Collection<? extends Activity>> consumer) {
|
||||
for (Activity child : activities) {
|
||||
Collection<? extends Activity> _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);
|
||||
}
|
||||
}
|
||||
@@ -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<ArtifactPopupItem> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
+7
-7
@@ -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<B
|
||||
}
|
||||
}.execute();
|
||||
|
||||
final ActivityStatusNotification callback = new ActivityStatusNotification() {
|
||||
final ProjectTaskNotification callback = new ProjectTaskNotification() {
|
||||
@Override
|
||||
public void finished(@NotNull ActivityExecutionResult executionResult) {
|
||||
public void finished(@NotNull ProjectTaskResult executionResult) {
|
||||
result.set(!executionResult.isAborted() && executionResult.getErrors() == 0);
|
||||
finished.up();
|
||||
}
|
||||
@@ -188,12 +188,12 @@ public class BuildArtifactsBeforeRunTaskProvider extends BeforeRunTaskProvider<B
|
||||
if (myProject.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
ActivityManager activityManager = ActivityManager.getInstance(myProject);
|
||||
Activity artifactsBuildActivity =
|
||||
activityManager.createArtifactsBuildActivity(true, artifacts.toArray(new Artifact[artifacts.size()]));
|
||||
ProjectTaskManager projectTaskManager = ProjectTaskManager.getInstance(myProject);
|
||||
ProjectTask artifactsBuildProjectTask =
|
||||
projectTaskManager.createArtifactsBuildTask(true, artifacts.toArray(new Artifact[artifacts.size()]));
|
||||
finished.down();
|
||||
Object sessionId = ExecutionManagerImpl.EXECUTION_SESSION_ID_KEY.get(env);
|
||||
activityManager.run(new ActivityContext(sessionId), artifactsBuildActivity, callback);
|
||||
projectTaskManager.run(new ProjectTaskContext(sessionId), artifactsBuildProjectTask, callback);
|
||||
}, ModalityState.NON_MODAL);
|
||||
|
||||
finished.waitFor();
|
||||
|
||||
+6
-6
@@ -13,10 +13,10 @@
|
||||
* 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.activity.BuildActivity;
|
||||
import com.intellij.task.BuildTask;
|
||||
import com.intellij.task.ProjectTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -26,14 +26,14 @@ import java.util.List;
|
||||
* @author Vladislav.Soroka
|
||||
* @since 7/13/2016
|
||||
*/
|
||||
public abstract class AbstractBuildActivity extends AbstractActivity implements BuildActivity {
|
||||
public abstract class AbstractBuildTask extends AbstractProjectTask implements BuildTask {
|
||||
private final boolean myIsIncrementalBuild;
|
||||
|
||||
public AbstractBuildActivity(boolean isIncrementalBuild) {
|
||||
public AbstractBuildTask(boolean isIncrementalBuild) {
|
||||
this(isIncrementalBuild, Collections.emptyList());
|
||||
}
|
||||
|
||||
public AbstractBuildActivity(boolean isIncrementalBuild, @NotNull List<Activity> dependencies) {
|
||||
public AbstractBuildTask(boolean isIncrementalBuild, @NotNull List<ProjectTask> dependencies) {
|
||||
super(dependencies);
|
||||
myIsIncrementalBuild = isIncrementalBuild;
|
||||
}
|
||||
+8
-8
@@ -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<Activity> myDependencies;
|
||||
private Collection<ProjectTask> myDependencies;
|
||||
|
||||
public AbstractActivity() {
|
||||
public AbstractProjectTask() {
|
||||
this(Collections.emptyList());
|
||||
}
|
||||
|
||||
public AbstractActivity(@NotNull Collection<Activity> dependencies) {
|
||||
public AbstractProjectTask(@NotNull Collection<ProjectTask> dependencies) {
|
||||
myDependencies = dependencies;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<Activity> getDependsOn() {
|
||||
public Collection<ProjectTask> getDependsOn() {
|
||||
return myDependencies;
|
||||
}
|
||||
|
||||
public void setDependsOn(@NotNull Collection<Activity> dependencies) {
|
||||
public void setDependsOn(@NotNull Collection<ProjectTask> dependencies) {
|
||||
myDependencies = dependencies;
|
||||
}
|
||||
|
||||
+5
-5
@@ -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";
|
||||
}
|
||||
}
|
||||
+14
-14
@@ -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;
|
||||
+46
-46
@@ -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<? extends Activity> activities) {
|
||||
@NotNull ProjectTaskContext context,
|
||||
@Nullable ProjectTaskNotification callback,
|
||||
@NotNull Collection<? extends ProjectTask> 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<Class<? extends Activity>, List<Activity>> activityMap = groupBy(activities);
|
||||
runModulesBuildActivities(project, context, compileNotification, activityMap);
|
||||
runFilesBuildActivities(project, compileNotification, activityMap);
|
||||
runArtifactsBuildActivities(project, context, compileNotification, activityMap);
|
||||
Map<Class<? extends ProjectTask>, List<ProjectTask>> 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<Class<? extends Activity>, List<Activity>> groupBy(@NotNull Collection<? extends Activity> 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<Class<? extends ProjectTask>, List<ProjectTask>> groupBy(@NotNull Collection<? extends ProjectTask> 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<Class<? extends Activity>, List<Activity>> activitiesMap) {
|
||||
Collection<? extends Activity> buildActivities = activitiesMap.get(ModuleBuildActivity.class);
|
||||
private static void runModulesBuildTasks(@NotNull Project project,
|
||||
@NotNull ProjectTaskContext context,
|
||||
@Nullable CompileStatusNotification compileNotification,
|
||||
@NotNull Map<Class<? extends ProjectTask>, List<ProjectTask>> tasksMap) {
|
||||
Collection<? extends ProjectTask> buildTasks = tasksMap.get(ModuleBuildTask.class);
|
||||
|
||||
|
||||
if (!ContainerUtil.isEmpty(buildActivities)) {
|
||||
if (!ContainerUtil.isEmpty(buildTasks)) {
|
||||
List<Module> toMake = new SmartList<>();
|
||||
List<Module> 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<Module> 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<Class<? extends Activity>, List<Activity>> activitiesMap) {
|
||||
Collection<? extends Activity> filesTargets = activitiesMap.get(ModuleFilesBuildActivity.class);
|
||||
private static void runFilesBuildTasks(@NotNull Project project,
|
||||
@Nullable CompileStatusNotification compileNotification,
|
||||
@NotNull Map<Class<? extends ProjectTask>, List<ProjectTask>> tasksMap) {
|
||||
Collection<? extends ProjectTask> 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<Class<? extends Activity>, List<Activity>> activitiesMap) {
|
||||
private static void runArtifactsBuildTasks(@NotNull Project project,
|
||||
@NotNull ProjectTaskContext context,
|
||||
@Nullable CompileStatusNotification compileNotification,
|
||||
@NotNull Map<Class<? extends ProjectTask>, List<ProjectTask>> tasksMap) {
|
||||
|
||||
Collection<? extends Activity> buildActivities = activitiesMap.get(ArtifactBuildActivity.class);
|
||||
if (!ContainerUtil.isEmpty(buildActivities)) {
|
||||
Collection<? extends ProjectTask> buildTasks = tasksMap.get(ArtifactBuildTask.class);
|
||||
if (!ContainerUtil.isEmpty(buildTasks)) {
|
||||
List<Artifact> toMake = new SmartList<>();
|
||||
List<Artifact> 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());
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -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";
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -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<VirtualFile> files) {
|
||||
public ModuleFilesBuildTaskImpl(Module module, boolean isIncrementalBuild, Collection<VirtualFile> 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) + "'";
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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<Activity> implements Activity {
|
||||
public ActivityList(@NotNull Collection<? extends Activity> c) {
|
||||
public class ProjectTaskList extends ArrayList<ProjectTask> implements ProjectTask {
|
||||
public ProjectTaskList(@NotNull Collection<? extends ProjectTask> c) {
|
||||
super(c);
|
||||
}
|
||||
|
||||
@@ -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<ModuleFilesBuildTask> 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<Pair<ProjectTaskRunner, Collection<? extends ProjectTask>>> toRun = new SmartList<>();
|
||||
|
||||
Consumer<Collection<? extends ProjectTask>> taskClassifier = tasks -> {
|
||||
Map<ProjectTaskRunner, ? extends List<? extends ProjectTask>> toBuild =
|
||||
tasks.stream().collect(Collectors.groupingBy(aTask -> {
|
||||
for (ProjectTaskRunner runner : getTaskRunners()) {
|
||||
if (runner.canRun(aTask)) return runner;
|
||||
}
|
||||
return myDefaultProjectTaskRunner;
|
||||
}));
|
||||
for (Map.Entry<ProjectTaskRunner, ? extends List<? extends ProjectTask>> 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<? extends ProjectTask> tasks,
|
||||
@NotNull Consumer<Collection<? extends ProjectTask>> consumer) {
|
||||
for (ProjectTask child : tasks) {
|
||||
Collection<? extends ProjectTask> 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);
|
||||
}
|
||||
}
|
||||
+11
-11
@@ -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() + "'";
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
+3
-3
@@ -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();
|
||||
}
|
||||
+5
-5
@@ -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;
|
||||
}
|
||||
+19
-17
@@ -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);
|
||||
|
||||
}
|
||||
+4
-4
@@ -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);
|
||||
}
|
||||
+3
-3
@@ -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;
|
||||
+12
-15
@@ -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<ActivityRunner> EP_NAME = ExtensionPointName.create("com.intellij.activityRunner");
|
||||
public static final ExtensionPointName<ProjectTaskRunner> EP_NAME = ExtensionPointName.create("com.intellij.projectTaskRunner");
|
||||
|
||||
public abstract void run(@NotNull Project project,
|
||||
@NotNull ActivityContext context,
|
||||
@Nullable ActivityStatusNotification callback,
|
||||
@NotNull Collection<? extends Activity> activities);
|
||||
@NotNull ProjectTaskContext context,
|
||||
@Nullable ProjectTaskNotification callback,
|
||||
@NotNull Collection<? extends ProjectTask> 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);
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
@@ -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<CompileStepBefor
|
||||
|
||||
final Semaphore done = new Semaphore();
|
||||
done.down();
|
||||
final ActivityStatusNotification callback = new ActivityStatusNotification() {
|
||||
public void finished(@NotNull ActivityExecutionResult executionResult) {
|
||||
final ProjectTaskNotification callback = new ProjectTaskNotification() {
|
||||
public void finished(@NotNull ProjectTaskResult executionResult) {
|
||||
if ((executionResult.getErrors() == 0 || ignoreErrors) && !executionResult.isAborted()) {
|
||||
result.set(Boolean.TRUE);
|
||||
}
|
||||
@@ -148,12 +148,12 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider<CompileStepBefor
|
||||
};
|
||||
|
||||
TransactionGuard.submitTransaction(myProject, () -> {
|
||||
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<CompileStepBefor
|
||||
runConfiguration.getClass().getName());
|
||||
}
|
||||
}
|
||||
activity = activityManager.createModulesBuildActivity(true, modules);
|
||||
projectTask = projectTaskManager.createModulesBuildTask(true, modules);
|
||||
}
|
||||
else {
|
||||
activity = activityManager.createAllModulesBuildActivity(true, myProject);
|
||||
projectTask = projectTaskManager.createAllModulesBuildTask(true, myProject);
|
||||
}
|
||||
}
|
||||
|
||||
if (!myProject.isDisposed()) {
|
||||
activityManager.run(new ActivityContext(sessionId, configuration), activity, callback);
|
||||
projectTaskManager.run(new ProjectTaskContext(sessionId, configuration), projectTask, callback);
|
||||
}
|
||||
else {
|
||||
done.up();
|
||||
|
||||
+1
-1
@@ -167,7 +167,7 @@ public final class ExecutionEnvironmentBuilder {
|
||||
@NotNull
|
||||
public ExecutionEnvironment build() {
|
||||
ExecutionEnvironment environment =
|
||||
ServiceManager.getService(myProject, ExecutionEnvironmentProvider.class).createActivityExecutionEnvironment(
|
||||
ServiceManager.getService(myProject, ExecutionEnvironmentProvider.class).createExecutionEnvironment(
|
||||
myProject, myRunProfile, myExecutor, myTarget, myRunnerSettings, myConfigurationSettings, myRunnerAndConfigurationSettings);
|
||||
|
||||
if (environment == null && myRunner == null) {
|
||||
|
||||
+7
-7
@@ -32,11 +32,11 @@ import org.jetbrains.annotations.Nullable;
|
||||
public interface ExecutionEnvironmentProvider {
|
||||
|
||||
@Nullable
|
||||
ExecutionEnvironment createActivityExecutionEnvironment(@NotNull Project project,
|
||||
@NotNull RunProfile runProfile,
|
||||
@NotNull Executor executor,
|
||||
@NotNull ExecutionTarget target,
|
||||
@Nullable RunnerSettings runnerSettings,
|
||||
@Nullable ConfigurationPerRunnerSettings configurationSettings,
|
||||
@Nullable RunnerAndConfigurationSettings settings);
|
||||
ExecutionEnvironment createExecutionEnvironment(@NotNull Project project,
|
||||
@NotNull RunProfile runProfile,
|
||||
@NotNull Executor executor,
|
||||
@NotNull ExecutionTarget target,
|
||||
@Nullable RunnerSettings runnerSettings,
|
||||
@Nullable ConfigurationPerRunnerSettings configurationSettings,
|
||||
@Nullable RunnerAndConfigurationSettings settings);
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
|
||||
<activityRunner implementation="org.jetbrains.plugins.gradle.execution.build.GradleActivityRunner"/>
|
||||
<projectTaskRunner implementation="org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner"/>
|
||||
<postStartupActivity implementation="org.jetbrains.plugins.gradle.service.project.GradleStartupActivity"/>
|
||||
|
||||
<orderEnumerationHandlerFactory implementation="org.jetbrains.plugins.gradle.execution.GradleOrderEnumeratorHandler$FactoryImpl"/>
|
||||
|
||||
+5
-5
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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<GradleArtifactBuildTasksProvider> 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<ExternalTaskPojo> cleanTasksConsumer,
|
||||
@NotNull Consumer<ExternalTaskPojo> buildTasksConsumer);
|
||||
}
|
||||
|
||||
+51
-51
@@ -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<? extends Activity> activities) {
|
||||
@NotNull ProjectTaskContext context,
|
||||
@Nullable ProjectTaskNotification callback,
|
||||
@NotNull Collection<? extends ProjectTask> tasks) {
|
||||
String executionName = "Gradle build";
|
||||
|
||||
MultiMap<String, String> buildTasksMap = MultiMap.createLinkedSet();
|
||||
MultiMap<String, String> cleanTasksMap = MultiMap.createLinkedSet();
|
||||
|
||||
Map<Class<? extends Activity>, List<Activity>> activityMap = InternalActivityRunner.groupBy(activities);
|
||||
Map<Class<? extends ProjectTask>, List<ProjectTask>> 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<String> 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<? extends Activity> activities,
|
||||
@NotNull MultiMap<String, String> cleanTasksMap,
|
||||
@NotNull MultiMap<String, String> buildTasksMap) {
|
||||
if (ContainerUtil.isEmpty(activities)) return;
|
||||
private static void addModulesBuildTasks(@Nullable Collection<? extends ProjectTask> projectTasks,
|
||||
@NotNull MultiMap<String, String> cleanTasksMap,
|
||||
@NotNull MultiMap<String, String> 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<ModuleData> moduleDataNode = moduleDataFinder.findModuleData(module);
|
||||
if (moduleDataNode == null) continue;
|
||||
|
||||
List<String> tasks = ContainerUtil.mapNotNull(ExternalSystemApiUtil.findAll(moduleDataNode, ProjectKeys.TASK),
|
||||
List<String> gradleTasks = ContainerUtil.mapNotNull(ExternalSystemApiUtil.findAll(moduleDataNode, ProjectKeys.TASK),
|
||||
node -> node.getData().isInherited() ? null : node.getData().getName());
|
||||
|
||||
Collection<String> 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<? extends Activity> activities,
|
||||
@NotNull MultiMap<String, String> cleanTasksMap,
|
||||
@NotNull MultiMap<String, String> buildTasksMap) {
|
||||
if (ContainerUtil.isEmpty(activities)) return;
|
||||
private static void addArtifactsBuildTasks(@Nullable Collection<? extends ProjectTask> tasks,
|
||||
@NotNull MultiMap<String, String> cleanTasksMap,
|
||||
@NotNull MultiMap<String, String> 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())
|
||||
);
|
||||
@@ -197,7 +197,7 @@
|
||||
|
||||
<extensionPoint name="testFramework" interface="com.intellij.testIntegration.TestFramework"/>
|
||||
|
||||
<extensionPoint name="activityRunner" interface="com.intellij.activity.ActivityRunner"/>
|
||||
<extensionPoint name="projectTaskRunner" interface="com.intellij.task.ProjectTaskRunner"/>
|
||||
|
||||
<extensionPoint name="unscrambleSupport" interface="com.intellij.unscramble.UnscrambleSupport"/>
|
||||
|
||||
|
||||
@@ -172,11 +172,11 @@
|
||||
<projectService serviceInterface="com.intellij.codeInsight.InferredAnnotationsManager"
|
||||
serviceImplementation="com.intellij.codeInsight.InferredAnnotationsManagerImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.activity.ActivityManager"
|
||||
serviceImplementation="com.intellij.activity.impl.ActivityManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.task.ProjectTaskManager"
|
||||
serviceImplementation="com.intellij.task.impl.ProjectTaskManagerImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.execution.runners.ExecutionEnvironmentProvider"
|
||||
serviceImplementation="com.intellij.activity.impl.ExecutionEnvironmentProviderImpl"/>
|
||||
serviceImplementation="com.intellij.task.impl.ExecutionEnvironmentProviderImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.openapi.compiler.CompilerManager"
|
||||
serviceImplementation="com.intellij.compiler.CompilerManagerImpl"/>
|
||||
|
||||
Reference in New Issue
Block a user