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 bde43385411b..6071a2a8562e 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 @@ -5,6 +5,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; @@ -34,6 +35,7 @@ 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.Disposer; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -169,7 +171,7 @@ public abstract class AbstractExternalProjectImportBuilder ExternalSystemUtil.refreshProject( - project, myExternalSystemId, projectSettings.getExternalProjectPath(), false, - ProgressExecutionMode.IN_BACKGROUND_ASYNC); + project, myExternalSystemId, projectSettings.getExternalProjectPath(), + createFinalImportCallback(project, projectSettings), false, ProgressExecutionMode.IN_BACKGROUND_ASYNC, true); if (!isFromUI) { resolveDependenciesTask.run(); } @@ -217,6 +219,23 @@ public abstract class AbstractExternalProjectImportBuilder externalProject) { + if (externalProject == null) { + return; + } + ServiceManager.getService(ProjectDataManager.class).importData(externalProject, project, false); + } + + @Override + public void onFailure(@NotNull String errorMessage, @Nullable String errorDetails) { + } + }; + } + @NotNull private ExternalProjectSettings getCurrentExternalProjectSettings() { ExternalProjectSettings result = myControl.getProjectSettings().clone(); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalProjectDataSelectorDialog.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalProjectDataSelectorDialog.java index 4301c9ac5d79..69b152976bae 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalProjectDataSelectorDialog.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalProjectDataSelectorDialog.java @@ -238,11 +238,6 @@ public class ExternalProjectDataSelectorDialog extends DialogWrapper { super.doCancelAction(); } - @Override - public void dispose() { - super.dispose(); - } - private CheckboxTree createTree() { final Couple rootAndPreselectedNode = createRoot(); final CheckedTreeNode root = rootAndPreselectedNode.first; diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index 3496cda6269b..b6f871d2cfbf 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -103,12 +103,32 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver projectDataNode = new DataNode<>(ProjectKeys.PROJECT, projectData, null); + + final String ideProjectPath = settings == null ? null : settings.getIdeProjectPath(); + final String mainModuleFileDirectoryPath = + ideProjectPath == null ? projectPath : ideProjectPath + "/.idea/modules/"; + + projectDataNode + .createChild(ProjectKeys.MODULE, new ModuleData(projectName, GradleConstants.SYSTEM_ID, StdModuleTypes.JAVA.getId(), + projectName, mainModuleFileDirectoryPath, projectPath)) + .createChild(ProjectKeys.CONTENT_ROOT, new ContentRootData(GradleConstants.SYSTEM_ID, projectPath)); + return projectDataNode; + } + if (settings != null) { myHelper.ensureInstalledWrapper(id, projectPath, settings, listener); } final GradleProjectResolverExtension projectResolverChain = createProjectResolverChain(settings); - DefaultProjectResolverContext resolverContext = new DefaultProjectResolverContext(id, projectPath, settings, listener, isPreviewMode); + DefaultProjectResolverContext resolverContext = new DefaultProjectResolverContext(id, projectPath, settings, listener, false); final DataNode resultProjectDataNode = myHelper.execute( projectPath, settings, new ProjectConnectionDataNodeFunction(resolverContext, projectResolverChain, false) ); @@ -116,7 +136,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver externalProject) { + if (externalProject == null) return; + Runnable selectDataTask = () -> { + ExternalProjectDataSelectorDialog dialog = new ExternalProjectDataSelectorDialog( + project, new InternalExternalProjectInfo( + GradleConstants.SYSTEM_ID, projectSettings.getExternalProjectPath(), externalProject)); + if (dialog.hasMultipleDataToSelect()) { + dialog.showAndGet(); + } + else { + Disposer.dispose(dialog.getDisposable()); + } + }; + + Runnable importTask = () -> ServiceManager.getService(ProjectDataManager.class).importData(externalProject, project, false); + + if (!ApplicationManager.getApplication().isHeadlessEnvironment()) { + ApplicationManager.getApplication().invokeLater(() -> { + selectDataTask.run(); + ApplicationManager.getApplication().executeOnPooledThread(importTask); + }); + } + else { + importTask.run(); + } + } + + @Override + public void onFailure(@NotNull String errorMessage, @Nullable String errorDetails) { + } + }; + } + @Override protected void beforeCommit(@NotNull DataNode dataNode, @NotNull Project project) { DataNode javaProjectNode = ExternalSystemApiUtil.find(dataNode, JavaProjectData.KEY);