mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-359528: ApplicationImpl.assertReadAccessAllowed() in MavenExternalParameters.createJavaParameters()
This commit is contained in:
@@ -20,6 +20,7 @@ package org.jetbrains.idea.maven.execution;
|
||||
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.project.MavenConsole;
|
||||
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
|
||||
import org.jetbrains.idea.maven.server.MavenServerConsole;
|
||||
@@ -28,8 +29,6 @@ import java.text.MessageFormat;
|
||||
|
||||
public abstract class MavenExecutor {
|
||||
final MavenRunnerParameters myParameters;
|
||||
final MavenGeneralSettings myCoreSettings;
|
||||
final MavenRunnerSettings myRunnerSettings;
|
||||
private final String myCaption;
|
||||
protected MavenConsole myConsole;
|
||||
private String myAction;
|
||||
@@ -39,13 +38,9 @@ public abstract class MavenExecutor {
|
||||
private int exitCode = 0;
|
||||
|
||||
public MavenExecutor(MavenRunnerParameters parameters,
|
||||
MavenGeneralSettings coreSettings,
|
||||
MavenRunnerSettings runnerSettings,
|
||||
String caption,
|
||||
MavenConsole console) {
|
||||
myParameters = parameters;
|
||||
myCoreSettings = coreSettings;
|
||||
myRunnerSettings = runnerSettings;
|
||||
myCaption = caption;
|
||||
myConsole = console;
|
||||
}
|
||||
@@ -58,7 +53,7 @@ public abstract class MavenExecutor {
|
||||
return myConsole;
|
||||
}
|
||||
|
||||
public void setAction(final String action) {
|
||||
public void setAction(@Nullable final String action) {
|
||||
myAction = action;
|
||||
}
|
||||
|
||||
@@ -113,5 +108,5 @@ public abstract class MavenExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
public abstract boolean execute(ProgressIndicator indicator);
|
||||
public abstract boolean execute(@Nullable ProgressIndicator indicator);
|
||||
}
|
||||
|
||||
+24
-10
@@ -19,6 +19,7 @@
|
||||
package org.jetbrains.idea.maven.execution;
|
||||
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.process.DefaultJavaProcessHandler;
|
||||
import com.intellij.execution.process.OSProcessHandler;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -26,6 +27,8 @@ import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.project.MavenConsole;
|
||||
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
|
||||
import org.jetbrains.idea.maven.server.MavenServerConsole;
|
||||
@@ -36,24 +39,35 @@ public class MavenExternalExecutor extends MavenExecutor {
|
||||
|
||||
@NonNls private static final String PHASE_INFO_REGEXP = "\\[INFO\\] \\[.*:.*\\]";
|
||||
@NonNls private static final int INFO_PREFIX_SIZE = "[INFO] ".length();
|
||||
private final Project myProject;
|
||||
|
||||
private JavaParameters myJavaParameters;
|
||||
private ExecutionException myParameterCreationError;
|
||||
|
||||
public MavenExternalExecutor(Project project,
|
||||
MavenRunnerParameters parameters,
|
||||
MavenGeneralSettings coreSettings,
|
||||
MavenRunnerSettings runnerSettings,
|
||||
MavenConsole console) {
|
||||
super(parameters, coreSettings, runnerSettings, RunnerBundle.message("external.executor.caption"), console);
|
||||
myProject = project;
|
||||
@NotNull MavenRunnerParameters parameters,
|
||||
@Nullable MavenGeneralSettings coreSettings,
|
||||
@Nullable MavenRunnerSettings runnerSettings,
|
||||
@NotNull MavenConsole console) {
|
||||
super(parameters, RunnerBundle.message("external.executor.caption"), console);
|
||||
|
||||
try {
|
||||
myJavaParameters = MavenExternalParameters.createJavaParameters(project, myParameters, coreSettings, runnerSettings);
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
myParameterCreationError = e;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean execute(final ProgressIndicator indicator) {
|
||||
displayProgress();
|
||||
|
||||
try {
|
||||
if (myParameterCreationError != null) {
|
||||
throw myParameterCreationError;
|
||||
}
|
||||
|
||||
myProcessHandler =
|
||||
new DefaultJavaProcessHandler(
|
||||
MavenExternalParameters.createJavaParameters(myProject, myParameters, myCoreSettings, myRunnerSettings)) {
|
||||
new DefaultJavaProcessHandler(myJavaParameters) {
|
||||
public void notifyTextAvailable(String text, Key outputType) {
|
||||
// todo move this logic to ConsoleAdapter class
|
||||
if (!myConsole.isSuppressed(text)) {
|
||||
@@ -91,7 +105,7 @@ public class MavenExternalExecutor extends MavenExecutor {
|
||||
myProcessHandler.waitFor();
|
||||
}
|
||||
|
||||
private void updateProgress(final ProgressIndicator indicator, final String text) {
|
||||
private void updateProgress(@Nullable final ProgressIndicator indicator, final String text) {
|
||||
if (indicator != null) {
|
||||
if (indicator.isCanceled()) {
|
||||
if (!isCancelled()) {
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
*/
|
||||
package org.jetbrains.idea.maven.execution;
|
||||
|
||||
import com.intellij.openapi.application.AccessToken;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
@@ -26,7 +28,6 @@ import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.project.MavenConsole;
|
||||
@@ -65,10 +66,9 @@ 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(getGeneralSettings(),
|
||||
Pair.create(parameters, settings));
|
||||
final MavenConsole console = createConsole();
|
||||
try {
|
||||
final MavenExecutor[] executor = new MavenExecutor[]{createExecutor(parameters, getGeneralSettings(), settings, console)};
|
||||
final MavenExecutor[] executor = new MavenExecutor[]{createExecutor(parameters, null, settings, console)};
|
||||
|
||||
ProgressManager.getInstance().run(new Task.Backgroundable(myProject, executor[0].getCaption(), true) {
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
@@ -114,21 +114,26 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
|
||||
}
|
||||
}
|
||||
|
||||
private MavenGeneralSettings getGeneralSettings() {
|
||||
return MavenProjectsManager.getInstance(myProject).getGeneralSettings();
|
||||
}
|
||||
|
||||
public boolean runBatch(List<MavenRunnerParameters> commands,
|
||||
@Nullable MavenGeneralSettings coreSettings,
|
||||
@Nullable MavenRunnerSettings runnerSettings,
|
||||
@Nullable final String action,
|
||||
ProgressIndicator indicator) {
|
||||
@Nullable ProgressIndicator indicator) {
|
||||
assert !ApplicationManager.getApplication().isReadAccessAllowed();
|
||||
|
||||
if (commands.isEmpty()) return true;
|
||||
|
||||
final MavenGeneralSettings effectiveCoreSettings = coreSettings != null ? coreSettings : getGeneralSettings();
|
||||
final MavenRunnerSettings effectiveRunnerSettings = runnerSettings != null ? runnerSettings : getState();
|
||||
MavenConsole console;
|
||||
|
||||
AccessToken accessToken = ReadAction.start();
|
||||
try {
|
||||
if (myProject.isDisposed()) return false;
|
||||
console = createConsole();
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
|
||||
MavenConsole console = createConsole(effectiveCoreSettings, null);
|
||||
try {
|
||||
int count = 0;
|
||||
for (MavenRunnerParameters command : commands) {
|
||||
@@ -136,7 +141,17 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
|
||||
indicator.setFraction(((double)count++) / commands.size());
|
||||
}
|
||||
|
||||
MavenExecutor executor = createExecutor(command, effectiveCoreSettings, effectiveRunnerSettings, console);
|
||||
MavenExecutor executor;
|
||||
|
||||
accessToken = ReadAction.start();
|
||||
try {
|
||||
if (myProject.isDisposed()) break;
|
||||
executor = createExecutor(command, coreSettings, runnerSettings, console);
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
|
||||
executor.setAction(action);
|
||||
if (!executor.execute(indicator)) {
|
||||
updateTargetFolders();
|
||||
@@ -158,8 +173,7 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
|
||||
MavenProjectsManager.getInstance(myProject).updateProjectTargetFolders();
|
||||
}
|
||||
|
||||
private MavenConsole createConsole(MavenGeneralSettings coreSettings,
|
||||
Pair<MavenRunnerParameters, MavenRunnerSettings> parametersAndSettings) {
|
||||
private MavenConsole createConsole() {
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
return new SoutMavenConsole();
|
||||
}
|
||||
@@ -167,8 +181,8 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
|
||||
}
|
||||
|
||||
private MavenExecutor createExecutor(MavenRunnerParameters taskParameters,
|
||||
MavenGeneralSettings coreSettings,
|
||||
MavenRunnerSettings runnerSettings,
|
||||
@Nullable MavenGeneralSettings coreSettings,
|
||||
@Nullable MavenRunnerSettings runnerSettings,
|
||||
MavenConsole console) {
|
||||
return new MavenExternalExecutor(myProject, taskParameters, coreSettings, runnerSettings, console);
|
||||
}
|
||||
|
||||
+12
-6
@@ -31,6 +31,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.concurrency.Semaphore;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.execution.MavenRunner;
|
||||
import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
|
||||
import org.jetbrains.idea.maven.navigator.SelectMavenGoalDialog;
|
||||
@@ -40,6 +41,7 @@ import org.jetbrains.idea.maven.utils.MavenIcons;
|
||||
import org.jetbrains.idea.maven.utils.MavenLog;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBeforeRunTask> {
|
||||
@@ -76,6 +78,7 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
|
||||
: TasksBundle.message("maven.tasks.before.run", desc);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Pair<MavenProject, String> getProjectAndGoalChecked(MavenBeforeRunTask task) {
|
||||
String path = task.getProjectPath();
|
||||
String goal = task.getGoal();
|
||||
@@ -129,6 +132,9 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
|
||||
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
|
||||
final Collection<String> explicitProfiles = MavenProjectsManager.getInstance(project).getExplicitProfiles();
|
||||
final MavenRunner mavenRunner = MavenRunner.getInstance(project);
|
||||
|
||||
targetDone.down();
|
||||
new Task.Backgroundable(project, TasksBundle.message("maven.tasks.executing"), true) {
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
@@ -137,13 +143,13 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
|
||||
true,
|
||||
projectAndGoal.first.getDirectory(),
|
||||
Collections.singletonList(projectAndGoal.second),
|
||||
MavenProjectsManager.getInstance(project).getExplicitProfiles());
|
||||
explicitProfiles);
|
||||
|
||||
result[0] = MavenRunner.getInstance(project).runBatch(Collections.singletonList(params),
|
||||
null,
|
||||
null,
|
||||
TasksBundle.message("maven.tasks.executing"),
|
||||
indicator);
|
||||
result[0] = mavenRunner.runBatch(Collections.singletonList(params),
|
||||
null,
|
||||
null,
|
||||
TasksBundle.message("maven.tasks.executing"),
|
||||
indicator);
|
||||
}
|
||||
finally {
|
||||
targetDone.up();
|
||||
|
||||
Reference in New Issue
Block a user