gradle: es aware run/make, rename Activity => ProjectTask

This commit is contained in:
Vladislav.Soroka
2016-09-21 12:30:57 +03:00
parent 1636d06ce2
commit 53ddd10a44
37 changed files with 447 additions and 448 deletions
@@ -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);
@@ -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();
@@ -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;
}
@@ -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;
}
@@ -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";
}
}
@@ -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;
@@ -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());
}
}
@@ -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";
}
}
@@ -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) + "'";
}
}
@@ -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);
}
}
@@ -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() + "'";
}
}
@@ -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();
}
@@ -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();
}
@@ -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();
}
@@ -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();
}
@@ -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();
}
@@ -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;
}
@@ -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);
}
@@ -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);
}
@@ -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;
@@ -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);
}
@@ -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();
@@ -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) {
@@ -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);
}
+1 -1
View File
@@ -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"/>
@@ -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) {
@@ -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);
}
@@ -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())
);
+1 -1
View File
@@ -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"/>
+3 -3
View File
@@ -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"/>