mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external system aware make build, MakeProjectStepBeforeRun refactored
This commit is contained in:
committed by
Vladislav.Soroka
parent
8ec6d38717
commit
8ff83cab8b
@@ -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<BuildSystemDriver, ? extends List<? extends BuildTarget>> 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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<? extends BuildTarget> getTargets();
|
||||
|
||||
void setSessionId(Object sessionId);
|
||||
void setSessionId(@Nullable Object sessionId);
|
||||
|
||||
@Nullable
|
||||
Object getSessionId();
|
||||
|
||||
void setRunConfiguration(@Nullable RunConfiguration configuration);
|
||||
|
||||
@Nullable
|
||||
RunConfiguration getRunConfiguration();
|
||||
}
|
||||
|
||||
@@ -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<? extends BuildTarget> myTargets;
|
||||
@Nullable
|
||||
private Object mySessionId;
|
||||
@Nullable
|
||||
private RunConfiguration myConfiguration;
|
||||
|
||||
public BuildScopeImpl(Collection<? extends BuildTarget> targets) {
|
||||
myTargets = targets;
|
||||
this(targets, null, null);
|
||||
}
|
||||
|
||||
public BuildScopeImpl(Collection<? extends BuildTarget> targets, @Nullable Object sessionId) {
|
||||
this(targets, sessionId, null);
|
||||
}
|
||||
|
||||
public BuildScopeImpl(Collection<? extends BuildTarget> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<Key> CONTENT_ID_KEY = Key.create("COMPILATION_CONTENT_ID_CUSTOM_KEY");
|
||||
public static final Key<RunConfiguration> RUN_CONFIGURATION_KEY = Key.create("RUN_CONFIGURATION");
|
||||
public static final Key<String> RUN_CONFIGURATION_TYPE_ID_KEY = Key.create("RUN_CONFIGURATION_TYPE_ID");
|
||||
|
||||
public static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.logOnlyGroup("Compiler");
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<CompileStepBeforeRun.MakeBeforeRunTask> {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.options.CompileStepBeforeRun");
|
||||
public static final Key<MakeBeforeRunTask> ID = Key.create("Make");
|
||||
public static final Key<RunConfiguration> RUN_CONFIGURATION = Key.create("RUN_CONFIGURATION");
|
||||
public static final Key<String> RUN_CONFIGURATION_TYPE_ID = Key.create("RUN_CONFIGURATION_TYPE_ID");
|
||||
/**
|
||||
* @deprecated to be removed in IDEA 2017
|
||||
*/
|
||||
public static final Key<RunConfiguration> RUN_CONFIGURATION = CompilerManager.RUN_CONFIGURATION_KEY;
|
||||
/**
|
||||
* @deprecated to be removed in IDEA 2017
|
||||
*/
|
||||
public static final Key<String> 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<CompileStepBefor
|
||||
|
||||
final Semaphore done = new Semaphore();
|
||||
done.down();
|
||||
final CompileStatusNotification callback = new CompileStatusNotification() {
|
||||
public void finished(final boolean aborted, final int errors, final int warnings, CompileContext compileContext) {
|
||||
final BuildStatusNotification callback = new BuildStatusNotificationAdapter() {
|
||||
public void finished(boolean aborted, int errors, int warnings) {
|
||||
if ((errors == 0 || ignoreErrors) && !aborted) {
|
||||
result.set(Boolean.TRUE);
|
||||
}
|
||||
@@ -142,11 +151,11 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider<CompileStepBefor
|
||||
};
|
||||
|
||||
TransactionGuard.submitTransaction(myProject, () -> {
|
||||
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<CompileStepBefor
|
||||
runConfiguration.getClass().getName());
|
||||
}
|
||||
}
|
||||
scope = compilerManager.createModulesCompileScope(modules, true, true);
|
||||
scope = buildSystemManager.createModulesBuildScope(modules);
|
||||
}
|
||||
else {
|
||||
scope = compilerManager.createProjectCompileScope(myProject);
|
||||
scope = buildSystemManager.createProjectBuildScope(myProject);
|
||||
}
|
||||
}
|
||||
|
||||
if (!myProject.isDisposed()) {
|
||||
scope.putUserData(RUN_CONFIGURATION, configuration);
|
||||
scope.putUserData(RUN_CONFIGURATION_TYPE_ID, configuration.getType().getId());
|
||||
ExecutionManagerImpl.EXECUTION_SESSION_ID_KEY.set(scope, ExecutionManagerImpl.EXECUTION_SESSION_ID_KEY.get(env));
|
||||
compilerManager.make(scope, callback);
|
||||
Object sessionId = ExecutionManagerImpl.EXECUTION_SESSION_ID_KEY.get(env);
|
||||
scope.setSessionId(sessionId);
|
||||
scope.setRunConfiguration(configuration);
|
||||
buildSystemManager.buildDirty(scope, callback);
|
||||
}
|
||||
else {
|
||||
done.up();
|
||||
@@ -194,7 +203,7 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider<CompileStepBefor
|
||||
|
||||
@Nullable
|
||||
public static RunConfiguration getRunConfiguration(final CompileScope compileScope) {
|
||||
return compileScope.getUserData(RUN_CONFIGURATION);
|
||||
return compileScope.getUserData(CompilerManager.RUN_CONFIGURATION_KEY);
|
||||
}
|
||||
|
||||
public static class MakeBeforeRunTask extends BeforeRunTask<MakeBeforeRunTask> {
|
||||
|
||||
@@ -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<MakeProjectS
|
||||
|
||||
@Nullable
|
||||
public static RunConfiguration getRunConfiguration(final CompileScope compileScope) {
|
||||
return compileScope.getUserData(CompileStepBeforeRun.RUN_CONFIGURATION);
|
||||
return compileScope.getUserData(CompilerManager.RUN_CONFIGURATION_KEY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user