diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleWizardStep.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleWizardStep.java index 19948a3ee6a4..8ebf933c1b51 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleWizardStep.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleWizardStep.java @@ -19,10 +19,8 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; import com.intellij.openapi.externalSystem.model.project.ProjectData; import com.intellij.openapi.externalSystem.model.project.ProjectId; -import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManager; import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.module.Module; @@ -56,8 +54,6 @@ public class GradleModuleWizardStep extends ModuleWizardStep { private final GradleModuleBuilder myBuilder; @NotNull private final WizardContext myContext; - @Nullable - private ProjectData myParent; private final GradleParentProjectForm myParentProjectForm; @@ -79,8 +75,7 @@ public class GradleModuleWizardStep extends ModuleWizardStep { myContext = context; myParentProjectForm = new GradleParentProjectForm(context, new NullableConsumer() { @Override - public void consume(@Nullable ProjectData data) { - myParent = data; + public void consume(@Nullable ProjectData parentProject) { updateComponents(); } }); @@ -155,27 +150,15 @@ public class GradleModuleWizardStep extends ModuleWizardStep { return true; } - @Nullable - public ProjectData findPotentialParentProject(@Nullable Project project) { - if (project == null) return null; - - final ExternalProjectInfo projectInfo = - ProjectDataManager.getInstance().getExternalProjectData(project, GradleConstants.SYSTEM_ID, myContext.getProjectFileDirectory()); - return projectInfo != null && projectInfo.getExternalProjectStructure() != null - ? projectInfo.getExternalProjectStructure().getData() - : null; - } - @Override public void updateStep() { - myParent = findPotentialParentProject(myProjectOrNull); - + ProjectData parentProject = myParentProjectForm.getParentProject(); ProjectId projectId = myBuilder.getProjectId(); if (projectId == null) { setTestIfEmpty(myArtifactIdField, myBuilder.getName()); - setTestIfEmpty(myGroupIdField, myParent == null ? myBuilder.getName() : myParent.getGroup()); - setTestIfEmpty(myVersionField, myParent == null ? DEFAULT_VERSION : myParent.getVersion()); + setTestIfEmpty(myGroupIdField, parentProject == null ? myBuilder.getName() : parentProject.getGroup()); + setTestIfEmpty(myVersionField, parentProject == null ? DEFAULT_VERSION : parentProject.getVersion()); } else { setTestIfEmpty(myArtifactIdField, projectId.getArtifactId()); @@ -197,8 +180,8 @@ public class GradleModuleWizardStep extends ModuleWizardStep { myInheritVersionCheckBox.setVisible(isAddToVisible); myParentProjectForm.updateComponents(); - - if (myParent == null) { + ProjectData parentProject = myParentProjectForm.getParentProject(); + if (parentProject == null) { myContext.putUserData(ExternalModuleSettingsStep.SKIP_STEP_KEY, Boolean.FALSE); myGroupIdField.setEnabled(true); myVersionField.setEnabled(true); @@ -216,11 +199,11 @@ public class GradleModuleWizardStep extends ModuleWizardStep { if (myInheritGroupIdCheckBox.isSelected() || myGroupIdField.getText().equals(myInheritedGroupId)) { - myGroupIdField.setText(myParent.getGroup()); + myGroupIdField.setText(parentProject.getGroup()); } if (myInheritVersionCheckBox.isSelected() || myVersionField.getText().equals(myInheritedVersion)) { - myVersionField.setText(myParent.getVersion()); + myVersionField.setText(parentProject.getVersion()); } myInheritedGroupId = myGroupIdField.getText(); myInheritedVersion = myVersionField.getText(); @@ -240,7 +223,8 @@ public class GradleModuleWizardStep extends ModuleWizardStep { @Override public void updateDataModel() { myContext.setProjectBuilder(myBuilder); - myBuilder.setParentProject(myParent); + ProjectData parentProject = myParentProjectForm.getParentProject(); + myBuilder.setParentProject(parentProject); myBuilder.setProjectId(new ProjectId(myGroupIdField.getText(), myArtifactIdField.getText(), @@ -251,8 +235,8 @@ public class GradleModuleWizardStep extends ModuleWizardStep { if (StringUtil.isNotEmpty(myBuilder.getProjectId().getArtifactId())) { myContext.setProjectName(myBuilder.getProjectId().getArtifactId()); } - if (myParent != null) { - myContext.setProjectFileDirectory(myParent.getLinkedExternalProjectPath() + '/' + myContext.getProjectName()); + if (parentProject != null) { + myContext.setProjectFileDirectory(parentProject.getLinkedExternalProjectPath() + '/' + myContext.getProjectName()); } else { if (myProjectOrNull != null) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleParentProjectForm.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleParentProjectForm.java index 862808267cf3..16bf695f7e7b 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleParentProjectForm.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleParentProjectForm.java @@ -27,6 +27,8 @@ import com.intellij.openapi.externalSystem.model.project.ProjectData; import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManager; import com.intellij.openapi.externalSystem.service.ui.ExternalProjectPathField; import com.intellij.openapi.externalSystem.service.ui.SelectExternalProjectDialog; +import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings; +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.fileTypes.FileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; @@ -64,10 +66,13 @@ public class GradleParentProjectForm { private JPanel myPanel; private JButton mySelectParent; private EditorTextField myParentPathField; + @NotNull + private final WizardContext myContext; - public GradleParentProjectForm(WizardContext context, @Nullable NullableConsumer consumer) { + public GradleParentProjectForm(@NotNull WizardContext context, @Nullable NullableConsumer consumer) { myProjectOrNull = context.getProject(); - myConsumer = consumer == null ? EmptyConsumer.getInstance() : consumer; + myContext = context; + myConsumer = consumer == null ? EmptyConsumer.getInstance() : consumer; myIsVisible = !context.isCreatingNewProject() && myProjectOrNull != null && isGradleModuleExist(context); initComponents(); } @@ -86,6 +91,9 @@ public class GradleParentProjectForm { myConsumer.consume(myParent); } }); + if (myParent == null) { + myParent = findPotentialParentProject(myProjectOrNull); + } } public JPanel getComponent() { @@ -123,6 +131,20 @@ public class GradleParentProjectForm { return project == null ? ProjectManager.getInstance().getDefaultProject() : project; } + @Nullable + private ProjectData findPotentialParentProject(@Nullable Project project) { + if (project == null) return null; + + ExternalProjectSettings linkedProjectSettings = + ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID).getLinkedProjectSettings(myContext.getProjectFileDirectory()); + if(linkedProjectSettings == null) return null; + + final ExternalProjectInfo projectInfo = + ProjectDataManager.getInstance().getExternalProjectData(project, GradleConstants.SYSTEM_ID, linkedProjectSettings.getExternalProjectPath()); + return projectInfo != null && projectInfo.getExternalProjectStructure() != null + ? projectInfo.getExternalProjectStructure().getData() : null; + } + private static void collapseIfPossible(@NotNull EditorTextField editorTextField, @NotNull ProjectSystemId systemId, @NotNull Project project) {