From 8ff83cab8baa67914c6cc87f4eb2a42155bc7030 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 12 Jul 2016 20:35:34 +0300 Subject: [PATCH] external system aware make build, MakeProjectStepBeforeRun refactored --- .../openapi/build/BuildSystemManagerImpl.java | 31 ++++++++++----- .../build/DefaultBuildSystemDriver.java | 12 +++++- .../intellij/openapi/build/BuildScope.java | 11 +++++- .../openapi/build/BuildScopeImpl.java | 23 ++++++++++- .../openapi/build/BuildSystemManager.java | 6 +++ .../openapi/compiler/CompilerManager.java | 4 ++ .../options/CompileStepBeforeRun.java | 39 ++++++++++++------- .../options/MakeProjectStepBeforeRun.java | 3 +- 8 files changed, 100 insertions(+), 29 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/openapi/build/BuildSystemManagerImpl.java b/java/compiler/impl/src/com/intellij/openapi/build/BuildSystemManagerImpl.java index e583582e4510..a4994a217708 100644 --- a/java/compiler/impl/src/com/intellij/openapi/build/BuildSystemManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/openapi/build/BuildSystemManagerImpl.java @@ -47,14 +47,12 @@ public class BuildSystemManagerImpl extends BuildSystemManager { @Override public void buildDirty(@NotNull Module[] modules, @Nullable BuildStatusNotification callback) { - BuildScope buildScope = new BuildScopeImpl(map(list(modules), ModuleBuildTarget::new)); - doBuild(buildScope, true, callback); + doBuild(createModulesBuildScope(modules), true, callback); } @Override public void rebuild(@NotNull Module[] modules, @Nullable BuildStatusNotification callback) { - BuildScope buildScope = new BuildScopeImpl(map(list(modules), ModuleBuildTarget::new)); - doBuild(buildScope, false, callback); + doBuild(createModulesBuildScope(modules), false, callback); } @Override @@ -91,12 +89,27 @@ public class BuildSystemManagerImpl extends BuildSystemManager { @Override public void buildProjectDirty(@Nullable BuildStatusNotification callback) { - doBuild(new ProjectBuildScope(myProject), true, callback); + doBuild(createProjectBuildScope(myProject), true, callback); } @Override public void rebuildProject(@Nullable BuildStatusNotification callback) { - doBuild(new ProjectBuildScope(myProject), false, callback); + doBuild(createProjectBuildScope(myProject), false, callback); + } + + @Override + public BuildScope createProjectBuildScope(Project project) { + return new ProjectBuildScope(project); + } + + @Override + public BuildScope createModulesBuildScope(Module... modules) { + return new BuildScopeImpl(map(list(modules), ModuleBuildTarget::new)); + } + + @Override + public BuildScope createArtifactsBuildScope(Artifact... artifacts) { + return new BuildScopeImpl(map(list(artifacts), ArtifactBuildTarget::new)); } @NotNull @@ -105,8 +118,7 @@ public class BuildSystemManagerImpl extends BuildSystemManager { } private void doBuild(@NotNull Artifact[] artifacts, @Nullable BuildStatusNotification callback, boolean isIncrementalBuild) { - BuildScope buildScope = new BuildScopeImpl(map(list(artifacts), ArtifactBuildTarget::new)); - doBuild(buildScope, isIncrementalBuild, callback); + doBuild(createArtifactsBuildScope(artifacts), isIncrementalBuild, callback); } private void doBuild(@NotNull BuildScope scope, boolean isIncrementalBuild, @Nullable BuildStatusNotification callback) { @@ -124,7 +136,8 @@ public class BuildSystemManagerImpl extends BuildSystemManager { AtomicBoolean abortedFlag = new AtomicBoolean(false); for (Map.Entry> entry : toBuild.entrySet()) { BuildSystemDriver driver = entry.getKey(); - BuildScope buildScope = toBuild.size() == 1 ? scope : new BuildScopeImpl(entry.getValue(), scope.getSessionId()); + BuildScope buildScope = + toBuild.size() == 1 ? scope : new BuildScopeImpl(entry.getValue(), scope.getSessionId(), scope.getRunConfiguration()); BuildChunkStatusNotification chunkStatusNotification = callback == null ? null : new BuildChunkStatusNotification() { @Override public void finished(boolean aborted, int errors, int warnings, BuildContext buildContext) { diff --git a/java/compiler/impl/src/com/intellij/openapi/build/DefaultBuildSystemDriver.java b/java/compiler/impl/src/com/intellij/openapi/build/DefaultBuildSystemDriver.java index be5d049ac284..5d1aaa412d53 100644 --- a/java/compiler/impl/src/com/intellij/openapi/build/DefaultBuildSystemDriver.java +++ b/java/compiler/impl/src/com/intellij/openapi/build/DefaultBuildSystemDriver.java @@ -20,6 +20,7 @@ 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.RunConfiguration; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunnerSettings; import com.intellij.execution.impl.ExecutionManagerImpl; @@ -88,11 +89,18 @@ public class DefaultBuildSystemDriver extends BuildSystemDriver { private static void buildProject(BuildContext buildContext, CompileStatusNotification callback) { Project project = buildContext.getProject(); + CompilerManager compilerManager = CompilerManager.getInstance(project); if (buildContext.isIncrementalBuild()) { - CompilerManager.getInstance(project).make(callback); + CompileScope scope = compilerManager.createProjectCompileScope(project); + RunConfiguration configuration = buildContext.getScope().getRunConfiguration(); + if (configuration != null) { + scope.putUserData(CompilerManager.RUN_CONFIGURATION_KEY, configuration); + scope.putUserData(CompilerManager.RUN_CONFIGURATION_TYPE_ID_KEY, configuration.getType().getId()); + } + compilerManager.make(scope, callback); } else { - CompilerManager.getInstance(project).rebuild(callback); + compilerManager.rebuild(callback); } } diff --git a/java/compiler/openapi/src/com/intellij/openapi/build/BuildScope.java b/java/compiler/openapi/src/com/intellij/openapi/build/BuildScope.java index b18c8ddb0d49..cb141ea7630e 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/build/BuildScope.java +++ b/java/compiler/openapi/src/com/intellij/openapi/build/BuildScope.java @@ -15,6 +15,9 @@ */ package com.intellij.openapi.build; +import com.intellij.execution.configurations.RunConfiguration; +import org.jetbrains.annotations.Nullable; + import java.util.Collection; /** @@ -24,7 +27,13 @@ import java.util.Collection; public interface BuildScope { Collection getTargets(); - void setSessionId(Object sessionId); + void setSessionId(@Nullable Object sessionId); + @Nullable Object getSessionId(); + + void setRunConfiguration(@Nullable RunConfiguration configuration); + + @Nullable + RunConfiguration getRunConfiguration(); } diff --git a/java/compiler/openapi/src/com/intellij/openapi/build/BuildScopeImpl.java b/java/compiler/openapi/src/com/intellij/openapi/build/BuildScopeImpl.java index bf505b6c806a..53023297db4e 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/build/BuildScopeImpl.java +++ b/java/compiler/openapi/src/com/intellij/openapi/build/BuildScopeImpl.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.build; +import com.intellij.execution.configurations.RunConfiguration; import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -27,14 +28,23 @@ public class BuildScopeImpl implements BuildScope { private final Collection myTargets; @Nullable private Object mySessionId; + @Nullable + private RunConfiguration myConfiguration; public BuildScopeImpl(Collection targets) { - myTargets = targets; + this(targets, null, null); } public BuildScopeImpl(Collection targets, @Nullable Object sessionId) { + this(targets, sessionId, null); + } + + public BuildScopeImpl(Collection targets, + @Nullable Object sessionId, + @Nullable RunConfiguration configuration) { myTargets = targets; mySessionId = sessionId; + myConfiguration = configuration; } @Override @@ -52,4 +62,15 @@ public class BuildScopeImpl implements BuildScope { public Object getSessionId() { return mySessionId; } + + @Override + public void setRunConfiguration(@Nullable RunConfiguration configuration) { + myConfiguration = configuration; + } + + @Nullable + @Override + public RunConfiguration getRunConfiguration() { + return myConfiguration; + } } diff --git a/java/compiler/openapi/src/com/intellij/openapi/build/BuildSystemManager.java b/java/compiler/openapi/src/com/intellij/openapi/build/BuildSystemManager.java index 02a8bccbc7c6..a32a9239123d 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/build/BuildSystemManager.java +++ b/java/compiler/openapi/src/com/intellij/openapi/build/BuildSystemManager.java @@ -86,4 +86,10 @@ public abstract class BuildSystemManager { public abstract void buildDirty(@NotNull BuildScope scope, @Nullable BuildStatusNotification callback); public abstract void rebuild(@NotNull BuildScope scope, @Nullable BuildStatusNotification callback); + + public abstract BuildScope createProjectBuildScope(Project project); + + public abstract BuildScope createModulesBuildScope(Module... modules); + + public abstract BuildScope createArtifactsBuildScope(Artifact... artifacts); } diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java index 11d793fdfdad..f254462499ce 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.compiler; +import com.intellij.execution.configurations.RunConfiguration; import com.intellij.notification.NotificationGroup; import com.intellij.openapi.Disposable; import com.intellij.openapi.components.ServiceManager; @@ -40,6 +41,9 @@ import java.util.Set; public abstract class CompilerManager { @Deprecated public static final Key CONTENT_ID_KEY = Key.create("COMPILATION_CONTENT_ID_CUSTOM_KEY"); + public static final Key RUN_CONFIGURATION_KEY = Key.create("RUN_CONFIGURATION"); + public static final Key RUN_CONFIGURATION_TYPE_ID_KEY = Key.create("RUN_CONFIGURATION_TYPE_ID"); + public static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.logOnlyGroup("Compiler"); /** diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java index 86cef9cd1bb3..db66d55f3c3c 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -27,9 +27,12 @@ import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.TransactionGuard; +import com.intellij.openapi.build.BuildScope; +import com.intellij.openapi.build.BuildStatusNotification; +import com.intellij.openapi.build.BuildStatusNotificationAdapter; +import com.intellij.openapi.build.BuildSystemManager; import com.intellij.openapi.compiler.CompileContext; import com.intellij.openapi.compiler.CompileScope; -import com.intellij.openapi.compiler.CompileStatusNotification; import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; @@ -49,8 +52,14 @@ import javax.swing.*; public class CompileStepBeforeRun extends BeforeRunTaskProvider { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.options.CompileStepBeforeRun"); public static final Key ID = Key.create("Make"); - public static final Key RUN_CONFIGURATION = Key.create("RUN_CONFIGURATION"); - public static final Key RUN_CONFIGURATION_TYPE_ID = Key.create("RUN_CONFIGURATION_TYPE_ID"); + /** + * @deprecated to be removed in IDEA 2017 + */ + public static final Key RUN_CONFIGURATION = CompilerManager.RUN_CONFIGURATION_KEY; + /** + * @deprecated to be removed in IDEA 2017 + */ + public static final Key RUN_CONFIGURATION_TYPE_ID = CompilerManager.RUN_CONFIGURATION_TYPE_ID_KEY; @NonNls protected static final String MAKE_PROJECT_ON_RUN_KEY = "makeProjectOnRun"; @@ -132,8 +141,8 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider { - CompileScope scope; - final CompilerManager compilerManager = CompilerManager.getInstance(myProject); + BuildScope scope; + final BuildSystemManager buildSystemManager = BuildSystemManager.getInstance(myProject); if (forceMakeProject) { // user explicitly requested whole-project make - scope = compilerManager.createProjectCompileScope(myProject); + scope = buildSystemManager.createProjectBuildScope(myProject); } else { final Module[] modules = runConfiguration.getModules(); @@ -157,18 +166,18 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider { diff --git a/java/execution/impl/src/com/intellij/compiler/options/MakeProjectStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/MakeProjectStepBeforeRun.java index 8cf2b703a9a6..64b0c8769ea1 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/MakeProjectStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/MakeProjectStepBeforeRun.java @@ -26,6 +26,7 @@ import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.compiler.CompileContext; import com.intellij.openapi.compiler.CompileScope; +import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import org.jetbrains.annotations.NotNull; @@ -90,7 +91,7 @@ public class MakeProjectStepBeforeRun extends BeforeRunTaskProvider