From 4f6a5dcc84e50ca6ed34bc58ecb36efb51f4909d Mon Sep 17 00:00:00 2001 From: Alexander Bubenchikov Date: Fri, 1 Mar 2019 14:45:31 +0300 Subject: [PATCH] IDEA-208029 - maven before run fix --- .../buildtool/BuildViewMavenConsole.java | 13 ++++++- .../idea/maven/execution/MavenRunner.java | 39 ++++++++++--------- .../build/MavenProjectTaskRunner.java | 3 +- .../idea/maven/project/MavenConsole.java | 5 ++- .../tasks/MavenBeforeRunTasksProvider.java | 5 ++- 5 files changed, 40 insertions(+), 25 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/BuildViewMavenConsole.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/BuildViewMavenConsole.java index cd257f457b7d..cb137aa69ab9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/BuildViewMavenConsole.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/BuildViewMavenConsole.java @@ -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(); + } + }; } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java index 17cedda4b584..6bbab761628b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java @@ -56,7 +56,7 @@ public class MavenRunner implements PersistentStateComponent commands, @@ -120,18 +121,11 @@ public class MavenRunner implements PersistentStateComponent { - 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 { - + 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 { + 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); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java index 88cf173366a2..8f98f406d908 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java @@ -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 diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsole.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsole.java index c7e22ad94590..9f4d79e99583 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsole.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsole.java @@ -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); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java index bea06bca6a4b..ef5cba2d9f62 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java @@ -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