From 7a43b9481e4668780ff4f1e477c5c32de8f07baf Mon Sep 17 00:00:00 2001 From: "Anton.Makeev" Date: Mon, 23 Nov 2009 14:21:33 +0300 Subject: [PATCH] Maven: updating sorce folders after goals execution --- .../dom/references/MavenModulePsiReference.java | 5 +- .../maven/execution/MavenRunConfiguration.java | 24 ++++- .../maven/execution/MavenRunConfigurationType.java | 50 +++++---- .../idea/maven/execution/MavenRunner.java | 4 - .../idea/maven/importing/MavenFoldersImporter.java | 1 - .../actions/MavenOpenOrCreateFilesAction.java | 5 +- .../idea/maven/project/actions/RunBuildAction.java | 17 +-- .../idea/maven/tasks/MavenKeymapExtension.java | 27 ++--- .../org/jetbrains/idea/maven/utils/MavenUtil.java | 8 ++ .../idea/maven/wizards/MavenModuleBuilder.java | 49 +++++---- .../org/jetbrains/idea/maven/MavenTestCase.java | 31 ++++-- .../idea/maven/execution/MavenExecutionTest.java | 116 +++++++++++++++++++++ .../idea/maven/execution/MavenExecutorsTest.java | 48 --------- .../idea/maven/execution/MavenRunnerTest.java | 53 ---------- 14 files changed, 247 insertions(+), 191 deletions(-) create mode 100644 plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutionTest.java delete mode 100644 plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutorsTest.java delete mode 100644 plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerTest.java diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenModulePsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenModulePsiReference.java index c1e6fa2be1..d057454347 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenModulePsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenModulePsiReference.java @@ -19,9 +19,6 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.LocalQuickFixProvider; import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.notification.Notifications; -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.io.FileUtil; @@ -134,7 +131,7 @@ public class MavenModulePsiReference extends MavenPsiReference implements LocalQ myWithParent ? id : null); } catch (IOException e) { - Notifications.Bus.notify(new Notification("Maven", "Cannot create a module", e.getMessage(), NotificationType.ERROR), project); + MavenUtil.showError(project, "Cannot create a module", e); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfiguration.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfiguration.java index 7034dee129..a3a8c37a68 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfiguration.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfiguration.java @@ -18,6 +18,9 @@ package org.jetbrains.idea.maven.execution; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.configurations.*; +import com.intellij.execution.process.OSProcessHandler; +import com.intellij.execution.process.ProcessAdapter; +import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.openapi.module.Module; @@ -69,6 +72,18 @@ public class MavenRunConfiguration extends RunConfigurationBase implements Locat return MavenExternalParameters .createJavaParameters(mySettings.myRunnerParameters, mySettings.myGeneralSettings, mySettings.myRunnerSettings); } + + @Override + protected OSProcessHandler startProcess() throws ExecutionException { + OSProcessHandler result = super.startProcess(); + result.addProcessListener(new ProcessAdapter() { + @Override + public void processTerminated(ProcessEvent event) { + updateProjectsFolders(); + } + }); + return result; + } }; state.setConsoleBuilder(MavenConsoleImpl.createConsoleBuilder(getProject())); return state; @@ -81,6 +96,10 @@ public class MavenRunConfiguration extends RunConfigurationBase implements Locat } } + private void updateProjectsFolders() { + MavenProjectsManager.getInstance(getProject()).updateProjectTargetFolders(); + } + @NotNull public Module[] getModules() { return Module.EMPTY_ARRAY; @@ -125,7 +144,7 @@ public class MavenRunConfiguration extends RunConfigurationBase implements Locat if (mySettings.myGeneralSettings == null) mySettings.myGeneralSettings = new MavenGeneralSettings(); if (mySettings.myRunnerSettings == null) mySettings.myRunnerSettings = new MavenRunnerSettings(); - if (mySettings.myRunnerParameters == null) mySettings.myRunnerParameters = new MavenRunnerParameters(); + if (mySettings.myRunnerParameters == null) mySettings.myRunnerParameters = new MavenRunnerParameters(); } } @@ -158,8 +177,7 @@ public class MavenRunConfiguration extends RunConfigurationBase implements Locat } public MavenSettings(Project project) { - this(MavenProjectsManager.getInstance(project).getGeneralSettings(), - MavenRunner.getInstance(project).getState(), + this(MavenProjectsManager.getInstance(project).getGeneralSettings(), MavenRunner.getInstance(project).getState(), new MavenRunnerParameters()); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java index bb2dad4387..e894b1feaa 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.execution; +import com.intellij.compiler.options.CompileStepBeforeRun; import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationTypeUtil; @@ -31,12 +32,13 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; -import com.intellij.compiler.options.CompileStepBeforeRun; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.project.MavenGeneralSettings; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; +import org.jetbrains.idea.maven.utils.MavenUtil; import javax.swing.*; import java.util.List; @@ -143,7 +145,7 @@ public class MavenRunConfigurationType implements LocatableConfigurationType { public RunnerAndConfigurationSettings createConfigurationByLocation(Location l) { final MavenRunnerParameters params = createBuildParameters(l); if (params == null) return null; - return createRunnerAndConfigurationSettings(null, null, params, l.getProject(), false); + return createRunnerAndConfigurationSettings(null, null, params, l.getProject()); } public boolean isConfigurationByLocation(RunConfiguration configuration, Location location) { @@ -161,24 +163,42 @@ public class MavenRunConfigurationType implements LocatableConfigurationType { return new MavenRunnerParameters(true, f.getParent().getPath(), goals, profiles); } - public static void runConfiguration(Project project, MavenRunnerParameters params, DataContext dataContext) throws ExecutionException { - doRunConfiguration(dataContext, createRunnerAndConfigurationSettings(MavenProjectsManager.getInstance(project).getGeneralSettings(), - MavenRunner.getInstance(project).getState(), - params, - project, - true)); + public static void runConfiguration(Project project, + MavenRunnerParameters params, + DataContext dataContext, + @Nullable ProgramRunner.Callback callback) { + MavenGeneralSettings settings = MavenProjectsManager.getInstance(project).getGeneralSettings(); + MavenRunnerSettings runnerSettings = MavenRunner.getInstance(project).getState(); + runConfiguration(project, params, settings, runnerSettings, dataContext, callback); } - private static void doRunConfiguration(DataContext dataContext, RunnerAndConfigurationSettings settings) throws ExecutionException { + public static void runConfiguration(Project project, + MavenRunnerParameters params, + MavenGeneralSettings settings, + MavenRunnerSettings runnerSettings, + DataContext context, + @Nullable ProgramRunner.Callback callback) { + RunnerAndConfigurationSettings configSettings = createRunnerAndConfigurationSettings(settings, + runnerSettings, + params, + project); + ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(DefaultRunExecutor.EXECUTOR_ID); - runner.execute(DefaultRunExecutor.getRunExecutorInstance(), new ExecutionEnvironment(runner, settings, dataContext)); + ExecutionEnvironment env = new ExecutionEnvironment(runner, configSettings, context); + Executor executor = DefaultRunExecutor.getRunExecutorInstance(); + + try { + runner.execute(executor, env, callback); + } + catch (ExecutionException e) { + MavenUtil.showError(project, "Failed to execute Maven goal", e); + } } private static RunnerAndConfigurationSettings createRunnerAndConfigurationSettings(MavenGeneralSettings generalSettings, MavenRunnerSettings runnerSettings, MavenRunnerParameters params, - Project project, - boolean diableMakeBeforeRun) { + Project project) { MavenRunConfigurationType type = ConfigurationTypeUtil.findConfigurationType(MavenRunConfigurationType.class); final RunnerAndConfigurationSettingsImpl settings = RunManagerEx.getInstanceEx(project) @@ -188,12 +208,6 @@ public class MavenRunConfigurationType implements LocatableConfigurationType { if (generalSettings != null) runConfiguration.setGeneralSettings(generalSettings); if (runnerSettings != null) runConfiguration.setRunnerSettings(runnerSettings); - if (diableMakeBeforeRun) disableMakeBeforeRun(RunManager.getInstance(project), runConfiguration); - return settings; } - - private static void disableMakeBeforeRun(RunManager runManager, MavenRunConfiguration runConfiguration) { - //((RunManagerEx)runManager).getBeforeRunTask(runConfiguration, CompileStepBeforeRun.ID).setEnabled(false); - } } 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 aaabb9b6c2..94b9de4e86 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 @@ -62,10 +62,6 @@ public class MavenRunner extends SimpleProjectComponent implements PersistentSta mySettings = settings; } - public void run(MavenRunnerParameters parameters, MavenRunnerSettings settings) { - run(parameters, settings, null); - } - public void run(final MavenRunnerParameters parameters, final MavenRunnerSettings settings, final Runnable onComplete) { FileDocumentManager.getInstance().saveAllDocuments(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java index 27b72e0e5c..6e78c91bcf 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java @@ -21,7 +21,6 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ProjectRootManager; -import org.jetbrains.idea.maven.importing.MavenImporter; import org.jetbrains.idea.maven.project.MavenImportingSettings; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenOpenOrCreateFilesAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenOpenOrCreateFilesAction.java index 84d31dd471..1f452f214b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenOpenOrCreateFilesAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenOpenOrCreateFilesAction.java @@ -15,9 +15,6 @@ */ package org.jetbrains.idea.maven.project.actions; -import com.intellij.notification.Notifications; -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.application.Result; @@ -84,7 +81,7 @@ public abstract class MavenOpenOrCreateFilesAction extends MavenAction { MavenUtil.runFileTemplate(project, newFile, getFileTemplate()); } catch (IOException ex) { - Notifications.Bus.notify(new Notification("Maven", "Cannot create " + file.getName(), ex.getMessage(), NotificationType.ERROR), project); + MavenUtil.showError(project, "Cannot create " + file.getName(), ex); } } }.execute(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/RunBuildAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/RunBuildAction.java index 8bbbd41855..435d031902 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/RunBuildAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/RunBuildAction.java @@ -15,15 +15,13 @@ */ package org.jetbrains.idea.maven.project.actions; -import com.intellij.execution.ExecutionException; import com.intellij.openapi.actionSystem.AnActionEvent; import org.jetbrains.idea.maven.execution.MavenRunConfigurationType; import org.jetbrains.idea.maven.execution.MavenRunnerParameters; +import org.jetbrains.idea.maven.project.MavenProject; +import org.jetbrains.idea.maven.utils.MavenDataKeys; import org.jetbrains.idea.maven.utils.actions.MavenAction; import org.jetbrains.idea.maven.utils.actions.MavenActionUtil; -import org.jetbrains.idea.maven.utils.MavenDataKeys; -import org.jetbrains.idea.maven.utils.MavenLog; -import org.jetbrains.idea.maven.project.MavenProject; import java.util.List; @@ -47,14 +45,9 @@ public class RunBuildAction extends MavenAction { if (!perform) return true; - try { - MavenRunnerParameters params = new MavenRunnerParameters( - true, project.getDirectory(), goals, MavenActionUtil.getProjectsManager(e).getActiveProfiles()); - MavenRunConfigurationType.runConfiguration(MavenActionUtil.getProject(e), params, e.getDataContext()); - } - catch (ExecutionException ex) { - MavenLog.LOG.warn(ex); - } + MavenRunnerParameters params = new MavenRunnerParameters( + true, project.getDirectory(), goals, MavenActionUtil.getProjectsManager(e).getActiveProfiles()); + MavenRunConfigurationType.runConfiguration(MavenActionUtil.getProject(e), params, e.getDataContext(), null); return true; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenKeymapExtension.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenKeymapExtension.java index 9b95aebd93..9767012551 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenKeymapExtension.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenKeymapExtension.java @@ -15,7 +15,6 @@ */ package org.jetbrains.idea.maven.tasks; -import com.intellij.execution.ExecutionException; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -28,17 +27,16 @@ import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import org.jetbrains.annotations.TestOnly; import org.jetbrains.idea.maven.embedder.MavenEmbedderFactory; +import org.jetbrains.idea.maven.execution.MavenRunConfigurationType; +import org.jetbrains.idea.maven.execution.MavenRunnerParameters; import org.jetbrains.idea.maven.project.MavenPlugin; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; -import org.jetbrains.idea.maven.execution.MavenRunConfigurationType; -import org.jetbrains.idea.maven.execution.MavenRunnerParameters; -import org.jetbrains.idea.maven.utils.actions.MavenAction; -import org.jetbrains.idea.maven.utils.actions.MavenActionUtil; import org.jetbrains.idea.maven.utils.MavenArtifactUtil; -import org.jetbrains.idea.maven.utils.MavenLog; -import org.jetbrains.idea.maven.utils.MavenPluginInfo; import org.jetbrains.idea.maven.utils.MavenIcons; +import org.jetbrains.idea.maven.utils.MavenPluginInfo; +import org.jetbrains.idea.maven.utils.actions.MavenAction; +import org.jetbrains.idea.maven.utils.actions.MavenActionUtil; import java.io.File; import java.util.*; @@ -184,16 +182,11 @@ public class MavenKeymapExtension implements KeymapExtension { } public void actionPerformed(AnActionEvent e) { - try { - MavenRunnerParameters params = new MavenRunnerParameters(true, - myMavenProject.getDirectory(), - Arrays.asList(myGoal), - MavenActionUtil.getProjectsManager(e).getActiveProfiles()); - MavenRunConfigurationType.runConfiguration(MavenActionUtil.getProject(e), params, e.getDataContext()); - } - catch (ExecutionException ex) { - MavenLog.LOG.warn(ex); - } + MavenRunnerParameters params = new MavenRunnerParameters(true, + myMavenProject.getDirectory(), + Arrays.asList(myGoal), + MavenActionUtil.getProjectsManager(e).getActiveProfiles()); + MavenRunConfigurationType.runConfiguration(MavenActionUtil.getProject(e), params, e.getDataContext(), null); } public MavenProject getMavenProject() { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java index 0f2ebbb8ff..6f5c94b393 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java @@ -19,6 +19,9 @@ import com.intellij.codeInsight.template.TemplateManager; import com.intellij.codeInsight.template.impl.TemplateImpl; import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.PathManager; @@ -150,6 +153,11 @@ public class MavenUtil { return LaterInvocator.isInModalContext(); } + public static void showError(Project project, String title, Throwable e) { + MavenLog.LOG.error(e); + Notifications.Bus.notify(new Notification("Maven", title, e.getMessage(), NotificationType.ERROR), project); + } + public static Properties getSystemProperties() { Properties result = (Properties)System.getProperties().clone(); for (String each : new THashSet((Set)result.keySet())) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java index e36f4d5180..1b9f244c69 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java @@ -15,14 +15,16 @@ */ package org.jetbrains.idea.maven.wizards; +import com.intellij.execution.process.ProcessAdapter; +import com.intellij.execution.process.ProcessEvent; +import com.intellij.execution.runners.ProgramRunner; +import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.ide.DataManager; import com.intellij.ide.util.EditorHelper; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.SourcePathsBuilder; import com.intellij.ide.util.projectWizard.WizardContext; -import com.intellij.notification.Notifications; -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationType; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; @@ -46,6 +48,7 @@ import com.intellij.psi.xml.XmlElement; import org.jetbrains.idea.maven.dom.MavenDomUtil; import org.jetbrains.idea.maven.dom.model.MavenDomModule; import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel; +import org.jetbrains.idea.maven.execution.MavenRunConfigurationType; import org.jetbrains.idea.maven.execution.MavenRunner; import org.jetbrains.idea.maven.execution.MavenRunnerParameters; import org.jetbrains.idea.maven.execution.MavenRunnerSettings; @@ -107,9 +110,7 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil result.setResult(file); } catch (IOException e) { - MavenLog.LOG.warn(e); - Notifications.Bus.notify(new Notification("Maven", "Cannot create " + MavenConstants.POM_XML + " " + root.getPath(), - e.getMessage(), NotificationType.ERROR), project); + showError(project, e); return; } @@ -185,7 +186,7 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil workingDir.deleteOnExit(); } catch (IOException e) { - MavenLog.LOG.warn("Cannot generate archetype", e); + showError(project, e); return; } @@ -208,22 +209,30 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil runner.run(params, settings, new Runnable() { public void run() { - try { - FileUtil.copyDir(new File(workingDir, myProjectId.getArtifactId()), new File(myContentRootPath)); - } - catch (IOException e) { - MavenLog.LOG.warn("Cannot generate archetype", e); - return; - } + copyGeneratedFiles(workingDir, pom, project); + } + }); + } + + private void copyGeneratedFiles(File workingDir, VirtualFile pom, Project project) { + try { + FileUtil.copyDir(new File(workingDir, myProjectId.getArtifactId()), new File(myContentRootPath)); + } + catch (IOException e) { + showError(project, e); + return; + } - FileUtil.delete(workingDir); + FileUtil.delete(workingDir); - pom.refresh(false, false); - updateProjectPom(project, pom); + pom.refresh(false, false); + updateProjectPom(project, pom); - LocalFileSystem.getInstance().refreshWithoutFileWatcher(true); - } - }); + LocalFileSystem.getInstance().refreshWithoutFileWatcher(true); + } + + private void showError(Project project, Throwable e) { + MavenUtil.showError(project, "Failed to create a Maven project", e); } @Override diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java index 227cc81c5a..3e226792f5 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java @@ -77,11 +77,15 @@ public abstract class MavenTestCase extends UsefulTestCase { MavenWorkspaceSettingsComponent.getInstance(myProject).loadState(new MavenWorkspaceSettings()); + String home = getTestMavenHome(); + if (home != null) { + getMavenGeneralSettings().setMavenHome(home); + } + restoreSettingsFile(); ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - try { setUpInWriteAction(); } @@ -153,11 +157,20 @@ public abstract class MavenTestCase extends UsefulTestCase { @Override protected void runTest() throws Throwable { - new WriteAction() { - protected void run(Result result) throws Throwable { - MavenTestCase.super.runTest(); - } - }.executeSilently().throwException(); + if (runInWriteAction()) { + new WriteAction() { + protected void run(Result result) throws Throwable { + MavenTestCase.super.runTest(); + } + }.executeSilently().throwException(); + } + else { + MavenTestCase.super.runTest(); + } + } + + protected boolean runInWriteAction() { + return true; } protected MavenGeneralSettings getMavenGeneralSettings() { @@ -409,8 +422,12 @@ public abstract class MavenTestCase extends UsefulTestCase { } protected boolean hasMavenInstallation() { - boolean result = "true".equals(System.getProperty("idea.maven.test.has.installation")); + boolean result = getTestMavenHome() != null; if (!result) System.out.println("Ignored, because Maven installation not found: " + getClass().getSimpleName() + "." + getName()); return result; } + + private String getTestMavenHome() { + return System.getProperty("idea.maven.test.home"); + } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutionTest.java new file mode 100644 index 0000000000..61ad735393 --- /dev/null +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutionTest.java @@ -0,0 +1,116 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.maven.execution; + +import com.intellij.execution.process.ProcessAdapter; +import com.intellij.execution.process.ProcessEvent; +import com.intellij.execution.runners.ProgramRunner; +import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.application.Result; +import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.testFramework.MapDataContext; +import com.intellij.util.concurrency.Semaphore; +import org.jetbrains.idea.maven.MavenImportingTestCase; + +import java.io.File; +import java.util.Arrays; + +@SuppressWarnings({"ConstantConditions"}) +public class MavenExecutionTest extends MavenImportingTestCase { + @Override + protected boolean runInWriteAction() { + return false; + } + + public void testExternalExecutor() throws Exception { + if (!hasMavenInstallation()) return; + + VfsUtil.saveText(createProjectSubFile("src/main/java/A.java"), "public class A {}"); + + new WriteAction() { + @Override + protected void run(Result objectResult) throws Throwable { + createProjectPom("test" + + "project" + + "1"); + } + }.execute(); + + assertFalse(new File(getProjectPath(), "target").exists()); + + execute(new MavenRunnerParameters(true, getProjectPath(), Arrays.asList("compile"), null)); + + assertTrue(new File(getProjectPath(), "target").exists()); + } + + public void testUpdatingExcludedFoldersAfterExecution() throws Exception { + if (!hasMavenInstallation()) return; + + new WriteAction() { + @Override + protected void run(Result objectResult) throws Throwable { + createStdProjectFolders(); + + importProject("test" + + "project" + + "1"); + + createProjectSubDirs("target/generated-sources/foo", + "target/bar"); + } + }.execute(); + + assertModules("project"); + assertExcludes("project", "target"); + + MavenRunnerParameters params = new MavenRunnerParameters(true, getProjectPath(), Arrays.asList("compile"), null); + execute(params); + + assertSources("project", + "src/main/java", + "src/main/resources", + "target/generated-sources/foo"); + + assertExcludes("project", + "target/bar", + "target/classes", + "target/classes"); // output dirs are collected twice for exclusion and for compiler output + } + + private void execute(MavenRunnerParameters params) { + final Semaphore sema = new Semaphore(); + sema.down(); + MapDataContext context = new MapDataContext(); + context.put(PlatformDataKeys.PROJECT, myProject); + MavenRunConfigurationType.runConfiguration(myProject, params, getMavenGeneralSettings(), + new MavenRunnerSettings(), + context, new ProgramRunner.Callback() { + public void processStarted(final RunContentDescriptor descriptor) { + descriptor.getProcessHandler().addProcessListener(new ProcessAdapter() { + @Override + public void processTerminated(ProcessEvent event) { + sema.up(); + descriptor.dispose(); + } + }); + } + }); + sema.waitFor(); + } + +} diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutorsTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutorsTest.java deleted file mode 100644 index ea464ba949..0000000000 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenExecutorsTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.idea.maven.execution; - -import com.intellij.openapi.progress.EmptyProgressIndicator; -import com.intellij.openapi.vfs.VfsUtil; -import org.jetbrains.idea.maven.MavenTestCase; - -import java.io.File; -import java.util.Arrays; - -public class MavenExecutorsTest extends MavenTestCase { - public void testExternalExecutor() throws Exception { - if (!hasMavenInstallation()) return; - - VfsUtil.saveText(createProjectSubFile("src/main/java/A.java"), "public class A {}"); - - createProjectPom("test" + - "project" + - "1"); - - assertFalse(new File(getProjectPath(), "target").exists()); - - MavenRunnerParameters params = new MavenRunnerParameters(true, getProjectPath(), Arrays.asList("compile"), null); - MavenRunnerSettings settings = new MavenRunnerSettings(); - - MavenExecutor e; - settings.setJreName(MavenRunnerSettings.USE_INTERNAL_JAVA); - e = new MavenExternalExecutor(params, getMavenGeneralSettings(), settings, NULL_MAVEN_CONSOLE); - - assertTrue(e.execute(new EmptyProgressIndicator())); - - assertTrue(new File(getProjectPath(), "target").exists()); - } -} diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerTest.java deleted file mode 100644 index 8390c21210..0000000000 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.idea.maven.execution; - -import org.jetbrains.idea.maven.MavenImportingTestCase; - -import java.util.Arrays; - -public class MavenRunnerTest extends MavenImportingTestCase { - public void testUpdatingExcludedFoldersAfterRun() throws Exception { - if (!hasMavenInstallation()) return; - - createStdProjectFolders(); - - importProject("test" + - "project" + - "1"); - - assertModules("project"); - assertExcludes("project", "target"); - - createProjectSubDirs("target/generated-sources/foo", - "target/bar"); - - MavenRunner runner = new MavenRunner(myProject); - MavenRunnerParameters params = new MavenRunnerParameters(true, getProjectPath(), Arrays.asList("compile"), null); - MavenRunnerSettings settings = new MavenRunnerSettings(); - runner.run(params, settings); - - assertSources("project", - "src/main/java", - "src/main/resources", - "target/generated-sources/foo"); - - assertExcludes("project", - "target/bar", - "target/classes", - "target/classes"); // output dirs are collected twice for exclusion and for compiler output - } -} -- 2.11.4.GIT