IDEA-208029 - maven before run fix

This commit is contained in:
Alexander Bubenchikov
2019-03-01 15:07:07 +03:00
parent 03492844ba
commit 4f6a5dcc84
5 changed files with 40 additions and 25 deletions
@@ -51,14 +51,17 @@ public class BuildViewMavenConsole extends MavenConsole {
private final BuildView myBuildView;
@NotNull
private final String myTitle;
private final long myExecutionId;
public BuildViewMavenConsole(@NotNull Project project,
@NotNull String title,
@NotNull String workingDir,
@NotNull String toolWindowId) {
@NotNull String toolWindowId,
long executionId) {
super(getSettings(project).getOutputLevel(), getSettings(project).isPrintErrorStackTraces());
myProject = project;
myTitle = title;
myExecutionId = executionId;
ExternalSystemTaskId taskId = ExternalSystemTaskId.create(MavenUtil.SYSTEM_ID, EXECUTE_TASK, project);
DefaultBuildDescriptor descriptor = new DefaultBuildDescriptor(taskId, "Run Maven task", workingDir, System.currentTimeMillis());
@@ -89,6 +92,7 @@ public class BuildViewMavenConsole extends MavenConsole {
JComponent consolePanel = createConsolePanel(myBuildView, actions);
RunContentDescriptor descriptor =
new RunContentDescriptor(myBuildView, processHandler, consolePanel, myTitle, MavenIcons.MavenLogo);
descriptor.setExecutionId(myExecutionId);
Disposer.register(descriptor, myBuildView);
ExecutionManager.getInstance(myProject).getContentManager().showRunContent(DefaultRunExecutor.getRunExecutorInstance(), descriptor);
});
@@ -163,6 +167,11 @@ public class BuildViewMavenConsole extends MavenConsole {
public boolean isBuildContentView() {
return true;
}
});
}){
@Override
public void dispose() {
super.dispose();
}
};
}
}
@@ -56,7 +56,7 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
public void run(final MavenRunnerParameters parameters, final MavenRunnerSettings settings, final Runnable onComplete) {
FileDocumentManager.getInstance().saveAllDocuments();
final MavenConsole console = createConsole(StringUtil.join(parameters.getGoals(), ", "), parameters.getWorkingDirPath());
final MavenConsole console = createConsole(myProject, parameters.getWorkingDirPath(), StringUtil.join(parameters.getGoals(), ", "), 0);
try {
final MavenExecutor executor = createExecutor(parameters, null, settings, console);
@@ -112,7 +112,8 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
@Nullable MavenRunnerSettings runnerSettings,
@Nullable final String action,
@Nullable ProgressIndicator indicator) {
return runBatch(commands, coreSettings, runnerSettings, action, indicator, null);
return runBatch(commands, coreSettings, runnerSettings, action, indicator, createConsole(myProject, myProject.getBasePath(), "Maven Batch", 0));
}
public boolean runBatch(List<MavenRunnerParameters> commands,
@@ -120,18 +121,11 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
@Nullable MavenRunnerSettings runnerSettings,
@Nullable final String action,
@Nullable ProgressIndicator indicator,
@Nullable MavenConsole mavenConsole) {
@NotNull MavenConsole mavenConsole) {
LOG.assertTrue(!ApplicationManager.getApplication().isReadAccessAllowed());
if (commands.isEmpty()) return true;
MavenConsole console = mavenConsole != null ? mavenConsole
: ReadAction.compute(() -> {
if (myProject.isDisposed()) return null;
return createConsole("Maven Batch", myProject.getBasePath());
});
if (console == null) return false;
try {
int count = 0;
for (MavenRunnerParameters command : commands) {
@@ -139,12 +133,9 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
indicator.setFraction(((double)count++) / commands.size());
}
MavenExecutor executor
= ReadAction.compute(()-> {
MavenExecutor executor = ReadAction.compute(() -> {
if (myProject.isDisposed()) return null;
return createExecutor(command, coreSettings, runnerSettings, console);
return createExecutor(command, coreSettings, runnerSettings, mavenConsole);
});
if (executor == null) break;
@@ -158,28 +149,38 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
updateTargetFolders();
}
finally {
console.finish();
mavenConsole.finish();
}
return true;
}
public static MavenConsole createConsole(@NotNull Project project,
@NotNull String workingDirPath,
@NotNull String title,
long executionId) {
return ReadAction.compute(() -> {
if (project.isDisposed()) return null;
return doCreateConsole(title, workingDirPath, project, executionId);
});
}
private void updateTargetFolders() {
if (myProject.isDisposed()) return; // project was closed before task finished.
MavenProjectsManager.getInstance(myProject).updateProjectTargetFolders();
}
private MavenConsole createConsole(@NotNull String title,@NotNull String workingDirPath) {
private static MavenConsole doCreateConsole(@NotNull String title, @NotNull String workingDirPath, Project project, long executionId) {
if (ApplicationManager.getApplication().isUnitTestMode()) {
return new SoutMavenConsole();
}
return MavenConsole.createGuiMavenConsole(myProject, title, workingDirPath, ToolWindowId.RUN);
return MavenConsole.createGuiMavenConsole(project, title, workingDirPath, ToolWindowId.RUN, executionId);
}
private MavenExecutor createExecutor(MavenRunnerParameters taskParameters,
@Nullable MavenGeneralSettings coreSettings,
@Nullable MavenRunnerSettings runnerSettings,
MavenConsole console) {
@NotNull MavenConsole console) {
return new MavenExternalExecutor(myProject, taskParameters, coreSettings, runnerSettings, console);
}
}
@@ -224,7 +224,8 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner {
ApplicationManager.getApplication().invokeAndWait(() -> {
AtomicInteger errors = new AtomicInteger();
AtomicInteger warnings = new AtomicInteger();
MavenConsole console = MavenConsole.createGuiMavenConsole(project, title, project.getBasePath(), ToolWindowId.BUILD);
MavenConsole console = MavenConsole.createGuiMavenConsole(project, title, project.getBasePath(), ToolWindowId.BUILD, 0);
console.addProcessListener(new ProcessAdapter() {
@Override
@@ -39,9 +39,10 @@ public abstract class MavenConsole {
public static MavenConsole createGuiMavenConsole(@NotNull Project project,
@NotNull String title,
@NotNull String workingDir,
@NotNull String toolWindowId) {
@NotNull String toolWindowId,
long executionId) {
if (Registry.is("maven.build.tool.window.enabled")) {
return new BuildViewMavenConsole(project, title, workingDir, toolWindowId);
return new BuildViewMavenConsole(project, title, workingDir, toolWindowId, executionId);
} else {
return new MavenConsoleImpl(title, project);
}
@@ -28,6 +28,7 @@ import org.jetbrains.idea.maven.execution.MavenRunner;
import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
import org.jetbrains.idea.maven.model.MavenConstants;
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
import org.jetbrains.idea.maven.project.MavenConsole;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
import org.jetbrains.idea.maven.utils.MavenLog;
@@ -169,6 +170,7 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
final MavenExplicitProfiles explicitProfiles = MavenProjectsManager.getInstance(project).getExplicitProfiles();
final MavenRunner mavenRunner = MavenRunner.getInstance(project);
final MavenConsole console = MavenRunner.createConsole(myProject, myProject.getBasePath(), "Maven: " + task.getGoal(), env.getExecutionId());
targetDone.down();
new Task.Backgroundable(project, TasksBundle.message("maven.tasks.executing"), true) {
@@ -187,7 +189,8 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
null,
null,
TasksBundle.message("maven.tasks.executing"),
indicator);
indicator,
console);
}
finally {
targetDone.up();