From e347c8527cdcdf43e4bb1e0aae8b35142002047c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 10 Mar 2020 14:55:23 +0300 Subject: [PATCH] cleanup: generalize ListCellRenderers GitOrigin-RevId: 7096333541ccc2558ea60b1f8541d14c9833e064 --- .../codeInsight/daemon/impl/MarkerType.java | 2 +- .../com/intellij/jarFinder/FindJarFix.java | 2 +- .../daemon/MergeableLineMarkerInfo.java | 4 +- .../intellij/build/MultipleBuildsView.java | 11 ++- .../daemon/impl/PsiElementListNavigator.java | 68 +++++++++---------- .../highlighting/ChooseOneOrAllRunnable.java | 7 +- .../ide/util/PsiElementListCellRenderer.java | 3 +- .../internal/ImageDuplicateResultsDialog.java | 18 ++--- .../ui/views/RecentChangesPopup.java | 13 ++-- .../ui/popup/IPopupChooserBuilder.java | 4 +- .../openapi/ui/popup/JBPopupFactory.java | 13 ++-- .../openapi/ui/popup/PopupChooserBuilder.java | 14 ++-- .../com/intellij/ui/components/JBList.java | 2 +- .../SelectionAwareListCellRenderer.java | 2 +- .../intellij/ui/popup/PopupFactoryImpl.java | 12 ++-- .../intellij/ui/popup/PopupListAdapter.java | 26 +++---- .../intellij/ui/popup/list/ComboBoxPopup.java | 19 +++--- .../groovy/codeInsight/GroovyMarkerTypes.java | 2 +- .../codeInsight/imports/PyImportChooser.java | 24 +++---- .../CreateNSDeclarationIntentionFix.java | 4 +- .../daemon/impl/analysis/XmlNSRenderer.java | 6 +- .../xml/actions/GenerateXmlTagAction.java | 14 ++-- 22 files changed, 133 insertions(+), 137 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java index 15b0b60943bf..746fdadf017b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java @@ -184,7 +184,7 @@ public class MarkerType { private static void navigateToSiblingOverridingMethod(MouseEvent e, @NotNull PsiMethod method) { PsiMethod superMethod = FindSuperElementsHelper.getSiblingInheritedViaSubClass(method); if (superMethod == null) return; - PsiElementListNavigator.openTargets(e, new NavigatablePsiElement[]{superMethod}, + PsiElementListNavigator.openTargets(e, new PsiMethod[]{superMethod}, DaemonBundle.message("navigation.title.super.method", method.getName()), DaemonBundle.message("navigation.findUsages.title.super.method", method.getName()), new MethodCellRenderer(false)); diff --git a/java/java-impl/src/com/intellij/jarFinder/FindJarFix.java b/java/java-impl/src/com/intellij/jarFinder/FindJarFix.java index 80dae8a817d1..2fb357ce0913 100644 --- a/java/java-impl/src/com/intellij/jarFinder/FindJarFix.java +++ b/java/java-impl/src/com/intellij/jarFinder/FindJarFix.java @@ -147,7 +147,7 @@ public abstract class FindJarFix implements IntentionActio } else { JBList libNames = new JBList<>(ContainerUtil.sorted(libs.keySet())); - libNames.installCellRenderer(o -> new JLabel(o.toString(), PlatformIcons.JAR_ICON, SwingConstants.LEFT)); + libNames.installCellRenderer(o -> new JLabel(o, PlatformIcons.JAR_ICON, SwingConstants.LEFT)); if (libs.size() == 1) { final String jarName = libs.keySet().iterator().next(); final String url = libs.get(jarName); diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java index e12660520323..801f7b095edc 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java @@ -174,11 +174,11 @@ public abstract class MergeableLineMarkerInfo extends Line IPopupChooserBuilder> builder = JBPopupFactory.getInstance().createPopupChooserBuilder(myInfos); builder.setRenderer(new SelectionAwareListCellRenderer<>(dom -> { Icon icon = null; - final GutterIconRenderer renderer = ((LineMarkerInfo)dom).createGutterRenderer(); + final GutterIconRenderer renderer = dom.createGutterRenderer(); if (renderer != null) { icon = renderer.getIcon(); } - PsiElement element = ((LineMarkerInfo)dom).getElement(); + PsiElement element = dom.getElement(); final String elementPresentation; if (element == null) { elementPresentation = IdeBundle.message("node.structureview.invalid"); diff --git a/platform/lang-impl/src/com/intellij/build/MultipleBuildsView.java b/platform/lang-impl/src/com/intellij/build/MultipleBuildsView.java index 2824769c2bc7..305f023d0b36 100644 --- a/platform/lang-impl/src/com/intellij/build/MultipleBuildsView.java +++ b/platform/lang-impl/src/com/intellij/build/MultipleBuildsView.java @@ -82,17 +82,16 @@ public class MultipleBuildsView implements BuildProgressListener, Disposable { myBuildsList.setModel(new DefaultListModel<>()); myBuildsList.setFixedCellHeight(UIUtil.LIST_FIXED_CELL_HEIGHT * 2); myBuildsList.installCellRenderer(obj -> { - AbstractViewManager.BuildInfo buildInfo = (AbstractViewManager.BuildInfo)obj; JPanel panel = new JPanel(new BorderLayout()); SimpleColoredComponent mainComponent = new SimpleColoredComponent(); - mainComponent.setIcon(buildInfo.getIcon()); - mainComponent.append(buildInfo.getTitle() + ": ", SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES); - mainComponent.append(buildInfo.message, SimpleTextAttributes.REGULAR_ATTRIBUTES); + mainComponent.setIcon(obj.getIcon()); + mainComponent.append(obj.getTitle() + ": ", SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES); + mainComponent.append(obj.message, SimpleTextAttributes.REGULAR_ATTRIBUTES); panel.add(mainComponent, BorderLayout.NORTH); - if (buildInfo.statusMessage != null) { + if (obj.statusMessage != null) { SimpleColoredComponent statusComponent = new SimpleColoredComponent(); statusComponent.setIcon(EmptyIcon.ICON_16); - statusComponent.append(buildInfo.statusMessage, SimpleTextAttributes.GRAY_ATTRIBUTES); + statusComponent.append(obj.statusMessage, SimpleTextAttributes.GRAY_ATTRIBUTES); panel.add(statusComponent, BorderLayout.SOUTH); } return panel; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java index 7167e96318ae..5ca07761eec4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java @@ -22,7 +22,6 @@ import com.intellij.psi.PsiElement; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.JBList; import com.intellij.usages.UsageView; -import com.intellij.util.ArrayUtil; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -38,16 +37,16 @@ public class PsiElementListNavigator { private PsiElementListNavigator() { } - public static void openTargets(MouseEvent e, NavigatablePsiElement[] targets, String title, final String findUsagesTitle, ListCellRenderer listRenderer) { + public static void openTargets(MouseEvent e, T[] targets, String title, final String findUsagesTitle, ListCellRenderer listRenderer) { openTargets(e, targets, title, findUsagesTitle, listRenderer, (BackgroundUpdaterTask)null); } - public static void openTargets(MouseEvent e, - NavigatablePsiElement[] targets, - String title, - final String findUsagesTitle, - ListCellRenderer listRenderer, - @Nullable BackgroundUpdaterTask listUpdaterTask) { + public static void openTargets(MouseEvent e, + T[] targets, + String title, + final String findUsagesTitle, + ListCellRenderer listRenderer, + @Nullable BackgroundUpdaterTask listUpdaterTask) { JBPopup popup = navigateOrCreatePopup(targets, title, findUsagesTitle, listRenderer, listUpdaterTask); if (popup != null) { RelativePoint point = new RelativePoint(e); @@ -60,12 +59,12 @@ public class PsiElementListNavigator { } } - public static void openTargets(Editor e, NavigatablePsiElement[] targets, String title, final String findUsagesTitle, ListCellRenderer listRenderer) { + public static void openTargets(Editor e, T[] targets, String title, final String findUsagesTitle, ListCellRenderer listRenderer) { openTargets(e, targets, title, findUsagesTitle, listRenderer, null); } - public static void openTargets(Editor e, NavigatablePsiElement[] targets, String title, final String findUsagesTitle, - ListCellRenderer listRenderer, @Nullable BackgroundUpdaterTask listUpdaterTask) { + public static void openTargets(Editor e, T[] targets, String title, final String findUsagesTitle, + ListCellRenderer listRenderer, @Nullable BackgroundUpdaterTask listUpdaterTask) { final JBPopup popup = navigateOrCreatePopup(targets, title, findUsagesTitle, listRenderer, listUpdaterTask); if (popup != null) { if (listUpdaterTask != null) { @@ -86,10 +85,10 @@ public class PsiElementListNavigator { } @Nullable - public static JBPopup navigateOrCreatePopup(final NavigatablePsiElement[] targets, + public static JBPopup navigateOrCreatePopup(final T[] targets, final String title, final String findUsagesTitle, - final ListCellRenderer listRenderer, + final ListCellRenderer listRenderer, @Nullable final BackgroundUpdaterTask listUpdaterTask) { return navigateOrCreatePopup(targets, title, findUsagesTitle, listRenderer, listUpdaterTask, selectedElements -> { for (Object element : selectedElements) { @@ -105,12 +104,12 @@ public class PsiElementListNavigator { * listUpdaterTask should be started after alarm is initialized so one-item popup won't blink */ @Nullable - public static JBPopup navigateOrCreatePopup(final NavigatablePsiElement @NotNull [] targets, + public static JBPopup navigateOrCreatePopup(final T @NotNull [] targets, final String title, final String findUsagesTitle, - final ListCellRenderer listRenderer, + final ListCellRenderer listRenderer, @Nullable final BackgroundUpdaterTask listUpdaterTask, - @NotNull final Consumer consumer) { + @NotNull final Consumer consumer) { return new NavigateOrPopupHelper(targets, title) .setFindUsagesTitle(findUsagesTitle) .setListRenderer(listRenderer) @@ -120,20 +119,18 @@ public class PsiElementListNavigator { } // Helper makes it easier to customize shown popup. - public static class NavigateOrPopupHelper { + public static class NavigateOrPopupHelper { - private final NavigatablePsiElement @NotNull [] myTargets; + private final T @NotNull [] myTargets; private final String myTitle; - @NotNull - private Consumer myTargetsConsumer; + private Consumer myTargetsConsumer; @Nullable private String myFindUsagesTitle; - @Nullable - private ListCellRenderer myListRenderer; + private @Nullable ListCellRenderer myListRenderer; @Nullable private BackgroundUpdaterTask myListUpdaterTask; @@ -141,14 +138,13 @@ public class PsiElementListNavigator { @Nullable private Project myProject; - public NavigateOrPopupHelper(NavigatablePsiElement @NotNull [] targets, String title) { + public NavigateOrPopupHelper(T @NotNull [] targets, String title) { myTargets = targets; myTitle = title; myTargetsConsumer = selectedElements -> { - for (Object element : selectedElements) { - PsiElement selected = (PsiElement)element; - if (selected.isValid()) { - ((NavigatablePsiElement)selected).navigate(true); + for (PsiElement element : selectedElements) { + if (element.isValid()) { + ((NavigatablePsiElement)element).navigate(true); } } }; @@ -161,7 +157,7 @@ public class PsiElementListNavigator { } @NotNull - public NavigateOrPopupHelper setListRenderer(@Nullable ListCellRenderer listRenderer) { + public NavigateOrPopupHelper setListRenderer(@Nullable ListCellRenderer listRenderer) { myListRenderer = listRenderer; return this; } @@ -173,7 +169,7 @@ public class PsiElementListNavigator { } @NotNull - public NavigateOrPopupHelper setTargetsConsumer(@NotNull Consumer targetsConsumer) { + public NavigateOrPopupHelper setTargetsConsumer(@NotNull Consumer targetsConsumer) { myTargetsConsumer = targetsConsumer; return this; } @@ -196,23 +192,23 @@ public class PsiElementListNavigator { myTargetsConsumer.consume(myTargets); return null; } - List initialTargetsList = Arrays.asList(myTargets); - Ref updatedTargetsList = Ref.create(myTargets); + List initialTargetsList = Arrays.asList(myTargets); + Ref updatedTargetsList = Ref.create(myTargets); - final IPopupChooserBuilder builder = JBPopupFactory.getInstance().createPopupChooserBuilder(initialTargetsList); + final IPopupChooserBuilder builder = JBPopupFactory.getInstance().createPopupChooserBuilder(initialTargetsList); afterPopupBuilderCreated(builder); if (myListRenderer instanceof PsiElementListCellRenderer) { ((PsiElementListCellRenderer)myListRenderer).installSpeedSearch(builder); } - IPopupChooserBuilder popupChooserBuilder = builder. + IPopupChooserBuilder popupChooserBuilder = builder. setTitle(myTitle). setMovable(true). setFont(EditorUtil.getEditorFont()). setRenderer(myListRenderer). withHintUpdateSupply(). setResizable(true). - setItemsChosenCallback(selectedValues -> myTargetsConsumer.consume(ArrayUtil.toObjectArray(selectedValues))). + setItemsChosenCallback(elements -> myTargetsConsumer.consume((T[])elements.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY))). setCancelCallback(() -> { if (myListUpdaterTask != null) { myListUpdaterTask.cancelTask(); @@ -258,7 +254,7 @@ public class PsiElementListNavigator { myListUpdaterTask.init(popup, new ListComponentUpdater() { @Override public void replaceModel(@NotNull List data) { - updatedTargetsList.set(data.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY)); + updatedTargetsList.set((T[])data.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY)); popupUpdater.replaceModel(data); } @@ -284,7 +280,7 @@ public class PsiElementListNavigator { return false; } - protected void afterPopupBuilderCreated(@NotNull IPopupChooserBuilder builder) { + protected void afterPopupBuilderCreated(@NotNull IPopupChooserBuilder builder) { // Do nothing by default } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/ChooseOneOrAllRunnable.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/ChooseOneOrAllRunnable.java index 71459da987bb..6a6d46baa904 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/ChooseOneOrAllRunnable.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/ChooseOneOrAllRunnable.java @@ -62,12 +62,11 @@ public abstract class ChooseOneOrAllRunnable implements Ru String selectAll = CodeInsightBundle.message("highlight.thrown.exceptions.chooser.all.entry"); model.add(0, selectAll); - final IPopupChooserBuilder builder = JBPopupFactory.getInstance() + IPopupChooserBuilder builder = JBPopupFactory.getInstance() .createPopupChooserBuilder(model) + .setRenderer(renderer) // exploit PsiElementListCellRenderer ability to render strings too .setSelectionMode(ListSelectionModel.SINGLE_SELECTION) - .setRenderer(renderer) - .setSelectionMode(ListSelectionModel.SINGLE_SELECTION) - .setItemChosenCallback((selectedValue) -> { + .setItemChosenCallback(selectedValue -> { if (selectedValue.equals(selectAll)) { selected(myClasses); } diff --git a/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java b/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java index e6ec283b769c..2e676f31a74a 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java +++ b/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java @@ -44,7 +44,8 @@ import java.util.regex.Pattern; import static com.intellij.openapi.vfs.newvfs.VfsPresentationUtil.getFileBackgroundColor; @DirtyUI -public abstract class PsiElementListCellRenderer extends JPanel implements ListCellRenderer { +// extends ListCellRenderer because it can render strings too +public abstract class PsiElementListCellRenderer extends JPanel implements ListCellRenderer { private static final Logger LOG = Logger.getInstance(PsiElementListCellRenderer.class); private static final String LEFT = BorderLayout.WEST; private static final Pattern CONTAINER_PATTERN = Pattern.compile("(\\(in |\\()?([^)]*)(\\))?"); diff --git a/platform/lang-impl/src/com/intellij/internal/ImageDuplicateResultsDialog.java b/platform/lang-impl/src/com/intellij/internal/ImageDuplicateResultsDialog.java index b7d9f3b63a72..281ea5e62fbd 100644 --- a/platform/lang-impl/src/com/intellij/internal/ImageDuplicateResultsDialog.java +++ b/platform/lang-impl/src/com/intellij/internal/ImageDuplicateResultsDialog.java @@ -124,24 +124,24 @@ public class ImageDuplicateResultsDialog extends DialogWrapper { return null; }); - final JBList list = new JBList(new ResourceModules().getModuleNames()); + JBList list = new JBList<>(new ResourceModules().getModuleNames()); final NotNullFunction modulesRenderer = dom -> new JLabel(dom instanceof Module ? ((Module)dom).getName() : dom.toString(), PlatformIcons.SOURCE_FOLDERS_ICON, SwingConstants.LEFT); list.installCellRenderer(modulesRenderer); final JPanel modulesPanel = ToolbarDecorator.createDecorator(list) .setAddAction(button -> { final Module[] all = ModuleManager.getInstance(myProject).getModules(); - Arrays.sort(all, (o1, o2) -> o1.getName().compareTo(o2.getName())); - final JBList modules = new JBList(all); + Arrays.sort(all, Comparator.comparing(Module::getName)); + JBList modules = new JBList<>(all); modules.installCellRenderer(modulesRenderer); JBPopupFactory.getInstance().createListPopupBuilder(modules) .setTitle("Add Resource Module") - .setNamerForFiltering(o -> ((Module)o).getName()) + .setNamerForFiltering(o -> o.getName()) .setItemChoosenCallback(() -> { - final Object value = modules.getSelectedValue(); - if (value instanceof Module && !myResourceModules.contains((Module)value)) { - myResourceModules.add((Module)value); - ((DefaultListModel)list.getModel()).addElement(((Module)value).getName()); + Module value = modules.getSelectedValue(); + if (value != null && !myResourceModules.contains(value)) { + myResourceModules.add(value); + ((DefaultListModel)list.getModel()).addElement(value.getName()); } ((DefaultTreeModel)myTree.getModel()).reload(); TreeUtil.expandAll(myTree); @@ -151,7 +151,7 @@ public class ImageDuplicateResultsDialog extends DialogWrapper { final Object[] values = list.getSelectedValues(); for (Object value : values) { myResourceModules.remove((String)value); - ((DefaultListModel)list.getModel()).removeElement(value); + ((DefaultListModel)list.getModel()).removeElement(value); } ((DefaultTreeModel)myTree.getModel()).reload(); TreeUtil.expandAll(myTree); diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/RecentChangesPopup.java b/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/RecentChangesPopup.java index 6ba5e7ca7fa2..e58c8dac5c1c 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/RecentChangesPopup.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/RecentChangesPopup.java @@ -34,7 +34,7 @@ public class RecentChangesPopup { .showCenteredInCurrentWindow(project); } - private static class RecentChangesListCellRenderer implements ListCellRenderer { + private static class RecentChangesListCellRenderer implements ListCellRenderer { private final JPanel myPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,UIUtil.DEFAULT_HGAP,2)); private final JLabel myActionLabel = new JLabel("", JLabel.LEFT); private final JLabel myDateLabel = new JLabel("", JLabel.LEFT); @@ -52,10 +52,13 @@ public class RecentChangesPopup { } @Override - public Component getListCellRendererComponent(JList l, Object val, int i, boolean isSelected, boolean cellHasFocus) { - RecentChange c = (RecentChange)val; - myActionLabel.setText(c.getChangeName()); - myDateLabel.setText(DateFormatUtil.formatDateTime(c.getTimestamp())); + public Component getListCellRendererComponent(JList list, + RecentChange value, + int index, + boolean isSelected, + boolean cellHasFocus) { + myActionLabel.setText(value.getChangeName()); + myDateLabel.setText(DateFormatUtil.formatDateTime(value.getTimestamp())); updateColors(isSelected); return myPanel; diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/IPopupChooserBuilder.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/IPopupChooserBuilder.java index 4f9a12f360df..20c6491a0ef0 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/IPopupChooserBuilder.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/IPopupChooserBuilder.java @@ -19,13 +19,13 @@ import java.util.Set; public interface IPopupChooserBuilder { - IPopupChooserBuilder setRenderer(ListCellRenderer renderer); + IPopupChooserBuilder setRenderer(ListCellRenderer renderer); @NotNull IPopupChooserBuilder setItemChosenCallback(@NotNull Consumer callback); @NotNull - IPopupChooserBuilder setItemsChosenCallback(@NotNull Consumer> callback); + IPopupChooserBuilder setItemsChosenCallback(@NotNull Consumer> callback); IPopupChooserBuilder setCancelOnClickOutside(boolean cancelOnClickOutside); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java index d2e93f30320c..822fdfe2a889 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java @@ -100,8 +100,8 @@ public abstract class JBPopupFactory { */ @Deprecated @NotNull - public PopupChooserBuilder createListPopupBuilder(@NotNull JList list) { - return new PopupChooserBuilder(list); + public PopupChooserBuilder createListPopupBuilder(@NotNull JList list) { + return new PopupChooserBuilder<>(list); } /** @@ -429,7 +429,10 @@ public abstract class JBPopupFactory { @Nullable public abstract Balloon getParentBalloonFor(@Nullable Component c); - protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JList list); - protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JTree tree); - protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JTable table); + @NotNull + protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JList list); + @NotNull + protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JTree tree); + @NotNull + protected abstract PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JTable table); } diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java index 8ccdbadf2892..ee2ea7209330 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java @@ -55,7 +55,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { private Component mySettingsButtons; private boolean myAutoselectOnMouseMove = true; - private Function myItemsNamer; + private Function myItemsNamer; private boolean myMayBeParent; private int myAdAlignment = SwingConstants.LEFT; private boolean myModalContext; @@ -69,7 +69,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { public interface PopupComponentAdapter { JComponent getComponent(); - default void setRenderer(ListCellRenderer renderer) {} + default void setRenderer(ListCellRenderer renderer) {} void setItemChosenCallback(Consumer callback); @@ -132,7 +132,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { private JScrollPane myScrollPane; - public PopupChooserBuilder(@NotNull JList list) { + public PopupChooserBuilder(@NotNull JList list) { myChooserComponent = JBPopupFactory.getInstance().createPopupComponentAdapter(this, list); } @@ -160,7 +160,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { } @Override - public IPopupChooserBuilder setRenderer(ListCellRenderer renderer) { + public IPopupChooserBuilder setRenderer(ListCellRenderer renderer) { myChooserComponent.setRenderer(renderer); return this; } @@ -178,7 +178,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { @NotNull @Override - public IPopupChooserBuilder setItemsChosenCallback(@NotNull Consumer> callback) { + public IPopupChooserBuilder setItemsChosenCallback(@NotNull Consumer> callback) { myChooserComponent.setItemsChosenCallback(callback); return this; } @@ -275,11 +275,11 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { @Override public PopupChooserBuilder setNamerForFiltering(Function namer) { - myItemsNamer = (Function)namer; + myItemsNamer = namer; return this; } - public Function getItemsNamer() { + public Function getItemsNamer() { return myItemsNamer; } diff --git a/platform/platform-api/src/com/intellij/ui/components/JBList.java b/platform/platform-api/src/com/intellij/ui/components/JBList.java index fd6ced95e83f..e39006de9df5 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBList.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBList.java @@ -291,7 +291,7 @@ public class JBList extends JList implements ComponentWithEmptyText, Compo super.setCellRenderer(new ExpandedItemListCellRendererWrapper<>(cellRenderer, myExpandableItemsHandler)); } - public void installCellRenderer(@NotNull final NotNullFunction fun) { + public void installCellRenderer(@NotNull final NotNullFunction fun) { setCellRenderer(new SelectionAwareListCellRenderer<>(fun)); } diff --git a/platform/platform-api/src/com/intellij/ui/components/SelectionAwareListCellRenderer.java b/platform/platform-api/src/com/intellij/ui/components/SelectionAwareListCellRenderer.java index 0a454fd91cb8..22d6ae86a7ca 100644 --- a/platform/platform-api/src/com/intellij/ui/components/SelectionAwareListCellRenderer.java +++ b/platform/platform-api/src/com/intellij/ui/components/SelectionAwareListCellRenderer.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -public class SelectionAwareListCellRenderer extends DefaultListCellRenderer { +public class SelectionAwareListCellRenderer implements ListCellRenderer { private final NotNullFunction myFun; public SelectionAwareListCellRenderer(NotNullFunction fun) {myFun = fun;} diff --git a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java index a40146e80648..53f284a1e29f 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java @@ -115,18 +115,18 @@ public class PopupFactoryImpl extends JBPopupFactory { } @Override - protected PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JList list) { - return new PopupListAdapter(builder, list); + protected PopupChooserBuilder.@NotNull PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JList list) { + return new PopupListAdapter<>(builder, list); } @Override - protected PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JTree tree) { - return new PopupTreeAdapter(builder, tree); + protected PopupChooserBuilder.@NotNull PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JTree tree) { + return new PopupTreeAdapter<>(builder, tree); } @Override - protected PopupChooserBuilder.PopupComponentAdapter createPopupComponentAdapter(PopupChooserBuilder builder, JTable table) { - return new PopupTableAdapter(builder, table); + protected PopupChooserBuilder.@NotNull PopupComponentAdapter createPopupComponentAdapter(@NotNull PopupChooserBuilder builder, @NotNull JTable table) { + return new PopupTableAdapter<>(builder, table); } @NotNull diff --git a/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java b/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java index a2e3467bef8f..0f0ac3105cdb 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java @@ -32,11 +32,11 @@ import java.util.Set; * @author yole */ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter { - private final JList myList; - private final PopupChooserBuilder myBuilder; - private ListWithFilter myListWithFilter; + private final JList myList; + private final PopupChooserBuilder myBuilder; + private ListWithFilter myListWithFilter; - PopupListAdapter(PopupChooserBuilder builder, JList list) { + PopupListAdapter(PopupChooserBuilder builder, JList list) { myBuilder = builder; myList = list; } @@ -47,16 +47,16 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter renderer) { myList.setCellRenderer(renderer); } @Override public void setItemChosenCallback(Consumer callback) { myBuilder.setItemChoosenCallback(() -> { - Object selectedValue = myList.getSelectedValue(); + T selectedValue = myList.getSelectedValue(); if (selectedValue != null) { - callback.consume((T)selectedValue); + callback.consume(selectedValue); } }); } @@ -87,7 +87,7 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter)ListWithFilter.wrap(myList, new MyListWrapper(myList), myBuilder.getItemsNamer()); myListWithFilter.setAutoPackHeight(myBuilder.isAutoPackHeightOnFiltering()); return myListWithFilter; } @@ -99,7 +99,7 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter list = myList; if (list.getSelectedIndex() == -1) { list.setSelectedIndex(0); } @@ -118,8 +118,8 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter c) { myList.addListSelectionListener(e -> { - Object selectedValue = myList.getSelectedValue(); - c.consume((T)selectedValue); + T selectedValue = myList.getSelectedValue(); + c.consume(selectedValue); }); } @@ -134,9 +134,9 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter myList; - private MyListWrapper(final JList list) { + private MyListWrapper(final JList list) { super(-1); list.setVisibleRowCount(myBuilder.getVisibleRowCount()); setViewportView(list); diff --git a/platform/platform-impl/src/com/intellij/ui/popup/list/ComboBoxPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/list/ComboBoxPopup.java index e99ebc4ec98c..fe3e38e310e0 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/list/ComboBoxPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/list/ComboBoxPopup.java @@ -10,8 +10,6 @@ import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.TitledSeparator; import com.intellij.ui.components.JBList; import com.intellij.ui.popup.WizardPopup; - -import java.util.function.Consumer; import com.intellij.util.ui.JBUI; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,6 +20,7 @@ import java.awt.*; import java.util.ArrayList; import java.util.EventListener; import java.util.List; +import java.util.function.Consumer; import java.util.function.Supplier; public class ComboBoxPopup extends ListPopupImpl { @@ -29,7 +28,7 @@ public class ComboBoxPopup extends ListPopupImpl { public ComboBoxPopup(@NotNull Context context, @Nullable T selectedItem, - @NotNull Consumer onItemSelected) { + @NotNull Consumer onItemSelected) { this(context, null, popupStateFromContext(context, onItemSelected, selectedItem), null); } @@ -44,7 +43,7 @@ public class ComboBoxPopup extends ListPopupImpl { @NotNull private static MyBasePopupState popupStateFromContext(@NotNull Context context, - @NotNull Consumer onItemSelected, + @NotNull Consumer onItemSelected, @Nullable T selectedItem) { MyBasePopupState step = new MyBasePopupState(onItemSelected, () -> context.getModel(), @@ -173,13 +172,13 @@ public class ComboBoxPopup extends ListPopupImpl { private static class MyBasePopupState extends BaseListPopupStep { private final JBList myProxyList = new JBList<>(); - private final Consumer myOnItemSelected; - private final Supplier> myGetComboboxModel; - private final Supplier> myGetRenderer; + private final Consumer myOnItemSelected; + private final @NotNull Supplier> myGetComboboxModel; + private final Supplier> myGetRenderer; - private MyBasePopupState(@NotNull Consumer onItemSelected, - @NotNull Supplier> getComboboxModel, - @NotNull Supplier> getRenderer) { + private MyBasePopupState(@NotNull Consumer onItemSelected, + @NotNull Supplier> getComboboxModel, + @NotNull Supplier> getRenderer) { super(null, copyItemsFromModel(getComboboxModel.get())); myOnItemSelected = onItemSelected; myGetComboboxModel = getComboboxModel; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java index c73e3f1fe0b4..3ca7e5a483e3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java @@ -183,7 +183,7 @@ public class GroovyMarkerTypes { Set superMethods = collectSuperMethods(method); if (superMethods.isEmpty()) return; - PsiElementListNavigator.openTargets(e, superMethods.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY), + PsiElementListNavigator.openTargets(e, superMethods.toArray(PsiMethod.EMPTY_ARRAY), DaemonBundle.message("navigation.title.super.method", method.getName()), DaemonBundle.message("navigation.findUsages.title.super.method", method.getName()), new MethodCellRenderer(true)); diff --git a/python/src/com/jetbrains/python/codeInsight/imports/PyImportChooser.java b/python/src/com/jetbrains/python/codeInsight/imports/PyImportChooser.java index 5583c445bd23..6e42824fe3b8 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/PyImportChooser.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/PyImportChooser.java @@ -6,7 +6,6 @@ import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.SimpleTextAttributes; @@ -34,7 +33,7 @@ public class PyImportChooser implements ImportChooser { .createPopupChooserBuilder(sources) .setRenderer(new CellRenderer(name)) .setTitle(useQualifiedImport ? PyPsiBundle.message("ACT.qualify.with.module") : PyPsiBundle.message("ACT.from.some.module.import")) - .setItemChosenCallback((item) -> { + .setItemChosenCallback(item -> { result.setResult(item); }) .setNamerForFiltering(o -> o.getPresentableText(name)) @@ -45,7 +44,7 @@ public class PyImportChooser implements ImportChooser { } // Stolen from FQNameCellRenderer - private static class CellRenderer extends SimpleColoredComponent implements ListCellRenderer { + private static class CellRenderer extends SimpleColoredComponent implements ListCellRenderer { private final Font FONT; private final String myName; @@ -56,24 +55,19 @@ public class PyImportChooser implements ImportChooser { setOpaque(true); } - // value is a QualifiedHolder @Override - public Component getListCellRendererComponent( - JList list, - Object value, // expected to be - int index, - boolean isSelected, - boolean cellHasFocus - ) { - + public Component getListCellRendererComponent(JList list, + ImportCandidateHolder value, + int index, + boolean isSelected, + boolean cellHasFocus) { clear(); - ImportCandidateHolder item = (ImportCandidateHolder)value; - PsiElement importable = ((ImportCandidateHolder)value).getImportable(); + PsiElement importable = value.getImportable(); if (importable != null) { setIcon(importable.getIcon(0)); } - String item_name = item.getPresentableText(myName); + String item_name = value.getPresentableText(myName); append(item_name, SimpleTextAttributes.REGULAR_ATTRIBUTES); setFont(FONT); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java index e18df2a5e68f..0c7ac974e111 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java @@ -293,9 +293,9 @@ public class CreateNSDeclarationIntentionFix implements HintAction, LocalQuickFi if (namespacesToChooseFrom.length > 1 && !ApplicationManager.getApplication().isUnitTestMode()) { JBPopupFactory.getInstance() .createPopupChooserBuilder(ContainerUtil.newArrayList(namespacesToChooseFrom)) - .setRenderer(XmlNSRenderer.INSTANCE) + .setRenderer(new XmlNSRenderer<>()) .setTitle(title) - .setItemChosenCallback((selectedValue) -> { + .setItemChosenCallback(selectedValue -> { PsiDocumentManager.getInstance(project).commitAllDocuments(); CommandProcessor.getInstance().executeCommand( project, diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlNSRenderer.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlNSRenderer.java index ec6890e9d435..409b374591a3 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlNSRenderer.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlNSRenderer.java @@ -28,7 +28,7 @@ import java.awt.*; /** * @author Dmitry Avdeev */ -public class XmlNSRenderer extends ColoredListCellRenderer { +public class XmlNSRenderer extends ColoredListCellRenderer { public static final XmlNSRenderer INSTANCE = new XmlNSRenderer(); @@ -38,8 +38,8 @@ public class XmlNSRenderer extends ColoredListCellRenderer { } @Override - protected void customizeCellRenderer(@NotNull final JList list, - final Object value, + protected void customizeCellRenderer(@NotNull final JList list, + final T value, final int index, final boolean selected, final boolean hasFocus) { diff --git a/xml/impl/src/com/intellij/xml/actions/GenerateXmlTagAction.java b/xml/impl/src/com/intellij/xml/actions/GenerateXmlTagAction.java index 88ff9b89f633..2c3a97e68e4b 100644 --- a/xml/impl/src/com/intellij/xml/actions/GenerateXmlTagAction.java +++ b/xml/impl/src/com/intellij/xml/actions/GenerateXmlTagAction.java @@ -297,7 +297,7 @@ public class GenerateXmlTagAction extends SimpleCodeInsightAction { return false; } - private static class MyListCellRenderer implements ListCellRenderer { + private static class MyListCellRenderer implements ListCellRenderer { private final JPanel myPanel; private final JLabel myNameLabel; private final JLabel myNSLabel; @@ -319,16 +319,18 @@ public class GenerateXmlTagAction extends SimpleCodeInsightAction { } @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - - XmlElementDescriptor descriptor = (XmlElementDescriptor)value; + public Component getListCellRendererComponent(JList list, + XmlElementDescriptor value, + int index, + boolean isSelected, + boolean cellHasFocus) { Color backgroundColor = isSelected ? list.getSelectionBackground() : list.getBackground(); - myNameLabel.setText(descriptor.getName()); + myNameLabel.setText(value.getName()); myNameLabel.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground()); myPanel.setBackground(backgroundColor); - myNSLabel.setText(getNamespace(descriptor)); + myNSLabel.setText(getNamespace(value)); myNSLabel.setForeground(LookupCellRenderer.getGrayedForeground(isSelected)); myNSLabel.setBackground(backgroundColor);