IDEA-154369 New Module: Gradle: by default "Add as module" shows "none", but works like parent module is selected

This commit is contained in:
Vladislav.Soroka
2016-04-08 15:19:32 +03:00
parent 101c03829f
commit e425f92a48
2 changed files with 36 additions and 30 deletions
@@ -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<ProjectData>() {
@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) {
@@ -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<ProjectData> consumer) {
public GradleParentProjectForm(@NotNull WizardContext context, @Nullable NullableConsumer<ProjectData> consumer) {
myProjectOrNull = context.getProject();
myConsumer = consumer == null ? EmptyConsumer.<ProjectData>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) {