diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java index cf7be530aaa1..f4f94ea4b711 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java @@ -33,6 +33,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; +import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -124,7 +125,7 @@ public abstract class AbstractExternalProjectImportBuilder modules = ContainerUtil.newSmartList(); final IdeModifiableModelsProvider modelsProvider = isFromUI ? new IdeUIModifiableModelsProvider( @@ -163,46 +164,59 @@ public abstract class AbstractExternalProjectImportBuilder externalProjectNode, + boolean isFromUI, + final List modules, + IdeModifiableModelsProvider modelsProvider, final ExternalProjectSettings projectSettings) { + myProjectDataManager.importData(externalProjectNode, project, modelsProvider, true); + myExternalProjectNode = null; + + // resolve dependencies + final Runnable resolveDependenciesTask = new Runnable() { + @Override + public void run() { + ExternalSystemUtil.refreshProject( + project, myExternalSystemId, projectSettings.getExternalProjectPath(), false, + ProgressExecutionMode.IN_BACKGROUND_ASYNC); + } + }; + if (!isFromUI) { + resolveDependenciesTask.run(); + } + else { + // execute when current dialog is closed + ExternalSystemUtil.invokeLater(project, ModalityState.NON_MODAL, new Runnable() { + @Override + public void run() { + final Module[] committedModules = ModuleManager.getInstance(project).getModules(); + if (ContainerUtil.list(committedModules).containsAll(modules)) { + resolveDependenciesTask.run(); + } + else { + ExternalSystemApiUtil.getLocalSettings(project, myExternalSystemId).forgetExternalProjects( + Collections.singleton(projectSettings.getExternalProjectPath())); + ExternalSystemApiUtil.getSettings(project, myExternalSystemId).unlinkExternalProject( + projectSettings.getExternalProjectPath()); + + ExternalProjectsManager.getInstance(project).forgetExternalProjectData( + myExternalSystemId, projectSettings.getExternalProjectPath()); + } + } + }); + } + } + @NotNull private ExternalProjectSettings getCurrentExternalProjectSettings() { ExternalProjectSettings result = myControl.getProjectSettings().clone();