don't require JDK where it can be null (EA-31649 - IAE: JdkChooserPanel.<init>), move declaration and registration of OrderEntryAppearanceService to correct place

This commit is contained in:
Dmitry Jemerov
2011-11-21 12:42:55 +01:00
parent d8aff37c3b
commit 35613a0ef9
17 changed files with 29 additions and 39 deletions

View File

@@ -198,7 +198,7 @@ public class LibraryOptionsPanel implements Disposable {
else if (value instanceof ExistingLibraryEditor) {
final Library library = ((ExistingLibraryEditor)value).getLibrary();
final boolean invalid = !((LibraryEx)library).getInvalidRootUrls(OrderRootType.CLASSES).isEmpty();
OrderEntryAppearanceService.getInstance(getProject()).forLibrary(library, invalid).customize(this);
OrderEntryAppearanceService.getInstance().forLibrary(getProject(), library, invalid).customize(this);
}
else if (value instanceof NewLibraryEditor) {
setIcon(PlatformIcons.LIBRARY_ICON);

View File

@@ -34,7 +34,6 @@ import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.components.JBList;
import com.intellij.util.ArrayUtil;
import gnu.trove.TIntArrayList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -50,16 +49,16 @@ public class JdkChooserPanel extends JPanel {
private JList myList = null;
private DefaultListModel myListModel = null;
private Sdk myCurrentJdk;
private final Project myProject;
@Nullable private final Project myProject;
private SdkType[] myAllowedJdkTypes = null;
public JdkChooserPanel(@NotNull final Project project) {
public JdkChooserPanel(@Nullable final Project project) {
super(new BorderLayout());
myProject = project;
myListModel = new DefaultListModel();
myList = new JBList(myListModel);
myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
myList.setCellRenderer(new ProjectJdkListRenderer(myList.getCellRenderer(), project));
myList.setCellRenderer(new ProjectJdkListRenderer(myList.getCellRenderer()));
//noinspection HardCodedStringLiteral
myList.setPrototypeCellValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

View File

@@ -15,12 +15,10 @@
*/
package com.intellij.ide.util.projectWizard;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.OrderEntryAppearanceService;
import com.intellij.ui.HtmlListCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -29,17 +27,14 @@ import javax.swing.*;
* @since May 18, 2005
*/
public class ProjectJdkListRenderer extends HtmlListCellRenderer {
private final Project myProject;
public ProjectJdkListRenderer(final ListCellRenderer listCellRenderer, @NotNull final Project project) {
public ProjectJdkListRenderer(final ListCellRenderer listCellRenderer) {
super(listCellRenderer);
myProject = project;
}
@Override
public void doCustomize(JList list, Object value, int index, boolean selected, boolean hasFocus) {
if (value == null || value instanceof Sdk) {
OrderEntryAppearanceService.getInstance(myProject).forJdk((Sdk)value, false, selected, index != -1).customize(this);
OrderEntryAppearanceService.getInstance().forJdk((Sdk)value, false, selected, index != -1).customize(this);
}
else {
final String str = value.toString();

View File

@@ -57,7 +57,7 @@ public class OrderEntryAppearanceServiceImpl extends OrderEntryAppearanceService
@NotNull
@Override
public CellAppearanceEx forOrderEntry(@NotNull final OrderEntry orderEntry, final boolean selected) {
public CellAppearanceEx forOrderEntry(Project project, @NotNull final OrderEntry orderEntry, final boolean selected) {
if (orderEntry instanceof JdkOrderEntry) {
JdkOrderEntry jdkLibraryEntry = (JdkOrderEntry)orderEntry;
Sdk jdk = jdkLibraryEntry.getJdk();
@@ -77,7 +77,7 @@ public class OrderEntryAppearanceServiceImpl extends OrderEntryAppearanceService
}
Library library = libraryOrderEntry.getLibrary();
assert library != null : libraryOrderEntry;
return forLibrary(library, false);
return forLibrary(project, library, false);
}
else if (orderEntry.isSynthetic()) {
String presentableName = orderEntry.getPresentableName();
@@ -95,7 +95,7 @@ public class OrderEntryAppearanceServiceImpl extends OrderEntryAppearanceService
@NotNull
@Override
public CellAppearanceEx forLibrary(@NotNull final Library library, final boolean hasInvalidRoots) {
public CellAppearanceEx forLibrary(Project project, @NotNull final Library library, final boolean hasInvalidRoots) {
final StructureConfigurableContext context = ProjectStructureConfigurable.getInstance(myProject).getContext();
final Icon icon = LibraryPresentationManager.getInstance().getCustomIcon(library, context);

View File

@@ -50,9 +50,9 @@ import java.util.Comparator;
class JdkComboBox extends ComboBoxWithWidePopup {
private final JButton myEditButton = new JButton(ApplicationBundle.message("button.edit"));
public JdkComboBox(@NotNull final ProjectSdksModel jdkModel, @NotNull final Project project) {
public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) {
super(new JdkComboBoxModel(jdkModel));
setRenderer(new ProjectJdkListRenderer(getRenderer(), project) {
setRenderer(new ProjectJdkListRenderer(getRenderer()) {
@Override
public void doCustomize(JList list, Object value, int index, boolean selected, boolean hasFocus) {
if (JdkComboBox.this.isEnabled()) {

View File

@@ -101,7 +101,7 @@ public abstract class ModuleJdkConfigurable implements Disposable {
private void init() {
myJdkPanel = new JPanel(new GridBagLayout());
myCbModuleJdk = new JdkComboBox(myJdksModel, myModuleEditor.myProject);
myCbModuleJdk = new JdkComboBox(myJdksModel);
myCbModuleJdk.insertItemAt(new JdkComboBox.ProjectJdkComboBoxItem(), 0);
myCbModuleJdk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

View File

@@ -102,7 +102,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable {
private void init() {
myJdkPanel = new JPanel(new GridBagLayout());
myCbProjectJdk = new JdkComboBox(myJdksModel, myProject);
myCbProjectJdk = new JdkComboBox(myJdksModel);
myCbProjectJdk.insertItemAt(new JdkComboBox.NoneJdkComboBoxItem(), 0);
myCbProjectJdk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

View File

@@ -604,14 +604,14 @@ public class ClasspathPanelImpl extends JPanel implements ClasspathPanel {
private static CellAppearanceEx getCellAppearance(final ClasspathTableItem<?> item,
final StructureConfigurableContext context,
final boolean selected) {
final OrderEntryAppearanceService service = OrderEntryAppearanceService.getInstance(context.getProject());
final OrderEntryAppearanceService service = OrderEntryAppearanceService.getInstance();
if (item instanceof InvalidJdkItem) {
return service.forJdk(null, false, selected, true);
}
else {
final OrderEntry entry = item.getEntry();
assert entry != null : item;
return service.forOrderEntry(entry, selected);
return service.forOrderEntry(context.getProject(), entry, selected);
}
}

View File

@@ -636,10 +636,10 @@ public class AnalyzeDependenciesComponent extends MasterDetailsComponent {
};
}
else {
return OrderEntryAppearanceService.getInstance(myModule.getProject()).forModule(e.getOwnerModule());
return OrderEntryAppearanceService.getInstance().forModule(e.getOwnerModule());
}
}
return OrderEntryAppearanceService.getInstance(myModule.getProject()).forOrderEntry(myExplanation.entry(), selected);
return OrderEntryAppearanceService.getInstance().forOrderEntry(myModule.getProject(), myExplanation.entry(), selected);
}
/**

View File

@@ -369,7 +369,7 @@ public class ModuleDependenciesAnalyzer {
@NotNull
@Override
public CellAppearanceEx getAppearance(boolean isSelected) {
return OrderEntryAppearanceService.getInstance(myEntry.getOwnerModule().getProject()).forOrderEntry(myEntry, isSelected);
return OrderEntryAppearanceService.getInstance().forOrderEntry(myEntry.getOwnerModule().getProject(), myEntry, isSelected);
}
}

View File

@@ -314,7 +314,7 @@ public abstract class ChooseLibrariesDialogBase extends DialogWrapper {
private static class LibraryDescriptor extends LibrariesTreeNodeBase<Library> {
protected LibraryDescriptor(final Project project, final NodeDescriptor parentDescriptor, final Library element) {
super(project, parentDescriptor, element);
final CellAppearanceEx appearance = OrderEntryAppearanceService.getInstance(project).forLibrary(element, false);
final CellAppearanceEx appearance = OrderEntryAppearanceService.getInstance().forLibrary(project, element, false);
final SimpleColoredComponent coloredComponent = new SimpleColoredComponent();
appearance.customize(coloredComponent);
final PresentationData templatePresentation = getTemplatePresentation();

View File

@@ -26,15 +26,15 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class OrderEntryAppearanceService {
public static OrderEntryAppearanceService getInstance(@NotNull final Project project) {
return ServiceManager.getService(project, OrderEntryAppearanceService.class);
public static OrderEntryAppearanceService getInstance() {
return ServiceManager.getService(OrderEntryAppearanceService.class);
}
@NotNull
public abstract CellAppearanceEx forOrderEntry(@NotNull OrderEntry orderEntry, boolean selected);
public abstract CellAppearanceEx forOrderEntry(Project project, @NotNull OrderEntry orderEntry, boolean selected);
@NotNull
public abstract CellAppearanceEx forLibrary(@NotNull Library library, boolean hasInvalidRoots);
public abstract CellAppearanceEx forLibrary(Project project, @NotNull Library library, boolean hasInvalidRoots);
@NotNull
public abstract CellAppearanceEx forJdk(@Nullable Sdk jdk, boolean isInComboBox, boolean selected, boolean showVersion);

View File

@@ -178,9 +178,6 @@
<projectService serviceInterface="com.intellij.execution.testframework.autotest.AutoTestManager"
serviceImplementation="com.intellij.execution.testframework.autotest.AutoTestManager"/>
<projectService serviceInterface="com.intellij.openapi.roots.ui.OrderEntryAppearanceService"
serviceImplementation="com.intellij.openapi.roots.ui.OrderEntryAppearanceServiceImpl"/>
<projectService serviceInterface="com.intellij.openapi.vcs.VcsFileListenerContextHelper"
serviceImplementation="com.intellij.openapi.vcs.VcsFileListenerContextHelper"/>

View File

@@ -22,7 +22,6 @@ import com.intellij.lang.ant.config.impl.AntInstallation;
import com.intellij.lang.ant.config.impl.AntReference;
import com.intellij.lang.ant.config.impl.GlobalAntConfiguration;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.OrderEntryAppearanceService;
import com.intellij.openapi.ui.FixedSizeButton;
@@ -35,7 +34,6 @@ import com.intellij.util.PlatformIcons;
import com.intellij.util.config.AbstractProperty;
import com.intellij.util.ui.AbstractTableCellEditor;
import com.intellij.util.ui.CellEditorComponentWithBrowseButton;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.text.BadLocationException;
@@ -165,12 +163,10 @@ public class AntUIUtil {
}
public static class ProjectJdkRenderer extends ColoredListCellRenderer {
private final Project myProject;
private final boolean myInComboBox;
private final String myProjectJdkName;
public ProjectJdkRenderer(@NotNull final Project project, boolean inComboBox, String projectJdkName) {
myProject = project;
public ProjectJdkRenderer(boolean inComboBox, String projectJdkName) {
myInComboBox = inComboBox;
myProjectJdkName = projectJdkName != null ? projectJdkName : "";
}
@@ -190,7 +186,7 @@ public class AntUIUtil {
}
}
else {
OrderEntryAppearanceService.getInstance(myProject).forJdk(jdk, myInComboBox, selected, true).customize(this);
OrderEntryAppearanceService.getInstance().forJdk(jdk, myInComboBox, selected, true).customize(this);
}
}
}

View File

@@ -433,7 +433,7 @@ public class BuildFilePropertiesPanel {
public void reset(AbstractProperty.AbstractPropertyContainer options) {
String projectJdkName = AntConfigurationImpl.DEFAULT_JDK_NAME.get(options);
myJDKsController.setRenderer(new AntUIUtil.ProjectJdkRenderer(myProject, true, projectJdkName));
myJDKsController.setRenderer(new AntUIUtil.ProjectJdkRenderer(true, projectJdkName));
super.reset(options);
myJDKsController.resetList(null);
myProjectDefaultAnt = AntConfigurationImpl.DEFAULT_ANT.get(options);

View File

@@ -156,6 +156,9 @@
<applicationService serviceInterface="com.intellij.psi.impl.file.PsiPackageImplementationHelper"
serviceImplementation="com.intellij.psi.impl.file.PsiPackageImplementationHelperImpl"/>
<applicationService serviceInterface="com.intellij.openapi.roots.ui.OrderEntryAppearanceService"
serviceImplementation="com.intellij.openapi.roots.ui.OrderEntryAppearanceServiceImpl"/>
<projectService serviceInterface="com.intellij.packaging.artifacts.ArtifactPointerManager"
serviceImplementation="com.intellij.packaging.impl.artifacts.ArtifactPointerManagerImpl"/>
<projectService serviceInterface="com.intellij.packaging.impl.artifacts.ArtifactBySourceFileFinder"