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