IDEA-120906 NPE at com.intellij.ide.util.projectWizard.SdkSettingsStep.<init>

This commit is contained in:
Dmitry Avdeev
2014-02-18 16:46:11 +04:00
parent cdfd4d055f
commit 50318ce5df
2 changed files with 59 additions and 60 deletions
@@ -17,8 +17,12 @@ package com.intellij.ide.util.projectWizard;
import com.intellij.CommonBundle;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ProjectRootManager;
@@ -31,6 +35,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Dmitry Avdeev
@@ -47,7 +53,9 @@ public class SdkSettingsStep extends ModuleWizardStep {
@NotNull Condition<SdkTypeId> sdkFilter) {
this(settingsStep.getContext(), moduleBuilder, sdkFilter);
settingsStep.addSettingsField(getSdkFieldLabel(settingsStep.getContext().getProject()), myJdkPanel);
if (!isEmpty()) {
settingsStep.addSettingsField(getSdkFieldLabel(settingsStep.getContext().getProject()), myJdkPanel);
}
}
public SdkSettingsStep(WizardContext context,
@@ -60,12 +68,60 @@ public class SdkSettingsStep extends ModuleWizardStep {
Project project = myWizardContext.getProject();
myModel.reset(project);
myJdkComboBox = JdkComboBox.createSdkComboBox(moduleBuilder, sdkFilter, project, myModel);
myJdkComboBox = new JdkComboBox(myModel, sdkFilter);
myJdkPanel = new JPanel(new BorderLayout(4, 0));
final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project);
ModuleType moduleType = moduleBuilder.getModuleType();
final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId());
myJdkComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Sdk jdk = myJdkComboBox.getSelectedJdk();
if (jdk != null) {
component.setValue(selectedJdkProperty, jdk.getName());
}
}
});
if (project != null) {
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) {
// use project SDK
return;
}
}
else {
// set default project SDK
Project defaultProject = ProjectManager.getInstance().getDefaultProject();
Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk();
if (sdk != null && sdkFilter.value(sdk.getSdkType())) {
myJdkComboBox.setSelectedJdk(sdk);
}
}
String value = component.getValue(selectedJdkProperty);
if (value != null) {
Sdk jdk = ProjectJdkTable.getInstance().findJdk(value);
if (jdk != null) {
myJdkComboBox.setSelectedJdk(jdk);
}
}
JButton button = new JButton("Ne\u001Bw...");
myJdkComboBox.setSetupButton(button, project, myModel,
project == null ? new JdkComboBox.NoneJdkComboBoxItem() : new JdkComboBox.ProjectJdkComboBoxItem(),
null,
false);
myJdkPanel.add(myJdkComboBox);
myJdkPanel.add(myJdkComboBox.getSetUpButton(), BorderLayout.EAST);
}
public boolean isEmpty() {
return myJdkPanel.getComponentCount() == 0;
}
@NotNull
protected String getSdkFieldLabel(@Nullable Project project) {
return (project == null ? "Project" : "Module") + " \u001BSDK:";
@@ -16,19 +16,13 @@
package com.intellij.openapi.roots.ui.configuration;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.ide.util.projectWizard.ProjectJdkListRenderer;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkType;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
import com.intellij.openapi.ui.ComboBoxWithWidePopup;
@@ -92,7 +86,7 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
else if (value instanceof ProjectJdkComboBoxItem) {
final Sdk jdk = jdkModel.getProjectSdk();
if (jdk != null) {
setIcon(((SdkType) jdk.getSdkType()).getIcon());
setIcon(((SdkType)jdk.getSdkType()).getIcon());
append(ProjectBundle.message("project.roots.project.jdk.inherited"), SimpleTextAttributes.REGULAR_ATTRIBUTES);
append(" (" + jdk.getName() + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
}
@@ -110,57 +104,6 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
});
}
public static JdkComboBox createSdkComboBox(ModuleBuilder moduleBuilder,
Condition<SdkTypeId> sdkFilter,
Project project,
ProjectSdksModel model) {
final JdkComboBox comboBox = new JdkComboBox(model, sdkFilter);
final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project);
ModuleType moduleType = moduleBuilder.getModuleType();
final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId());
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Sdk jdk = comboBox.getSelectedJdk();
if (jdk != null) {
component.setValue(selectedJdkProperty, jdk.getName());
}
}
});
if (project != null) {
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) {
// use project SDK
return null;
}
}
else {
// set default project SDK
Project defaultProject = ProjectManager.getInstance().getDefaultProject();
Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk();
if (sdk != null && sdkFilter.value(sdk.getSdkType())) {
comboBox.setSelectedJdk(sdk);
}
}
String value = component.getValue(selectedJdkProperty);
if (value != null) {
Sdk jdk = ProjectJdkTable.getInstance().findJdk(value);
if (jdk != null) {
comboBox.setSelectedJdk(jdk);
}
}
JButton button = new JButton("Ne\u001Bw...");
comboBox.setSetupButton(button, project, model,
project == null ? new NoneJdkComboBoxItem() : new ProjectJdkComboBoxItem(),
null,
false);
return comboBox;
}
@Override
public Dimension getPreferredSize() {
final Rectangle rec = ScreenUtil.getScreenRectangle(0, 0);