call `SearchEverywhereContributor#getElementsRenderer` once and cache the result
authorDaniil Ovchinnikov <daniil.ovchinnikov@jetbrains.com>
Tue, 2 Mar 2021 15:11:00 +0000 (16:11 +0100)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Tue, 2 Mar 2021 16:42:20 +0000 (16:42 +0000)
GitOrigin-RevId: 4a07d4d03b390f1a5a416ad77c976f15ad173605

platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/GroupedListFactory.java
platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/MixedListFactory.java
platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereFoundElementInfo.java
platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchListModel.java

index 286b22267998a317987f4fb750a61d09a9527082..bc9ca67955c703a0a8811566a9adac81c2332b98 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.ide.actions.searcheverywhere;
 
 import com.intellij.ide.actions.SearchEverywhereClassifier;
 package com.intellij.ide.actions.searcheverywhere;
 
 import com.intellij.ide.actions.SearchEverywhereClassifier;
@@ -44,9 +44,9 @@ class GroupedListFactory extends SEResultsListFactory {
         Component component = SearchEverywhereClassifier.EP_Manager.getListCellRendererComponent(
           list, value, index, isSelected, cellHasFocus);
         if (component == null) {
         Component component = SearchEverywhereClassifier.EP_Manager.getListCellRendererComponent(
           list, value, index, isSelected, cellHasFocus);
         if (component == null) {
+          ListCellRenderer<? super Object> renderer = groupedModel.getRendererForIndex(index);
           //noinspection ConstantConditions
           //noinspection ConstantConditions
-          component = contributor.getElementsRenderer().getListCellRendererComponent(
-            list, value, index, isSelected, true);
+          component = renderer.getListCellRendererComponent(list, value, index, isSelected, true);
         }
 
         if (component instanceof JComponent) {
         }
 
         if (component instanceof JComponent) {
index b9840045f4d65475da8f853ab4e079c6913286dd..9b4dd3e4747b652d013b0ae7b2bdde893c550e59 100644 (file)
@@ -69,12 +69,11 @@ class MixedListFactory extends SEResultsListFactory {
           return component;
         }
 
           return component;
         }
 
-        SearchEverywhereContributor<Object> contributor = model.getContributorForIndex(index);
         Component component = SearchEverywhereClassifier.EP_Manager.getListCellRendererComponent(
           list, value, index, isSelected, cellHasFocus);
         if (component == null) {
         Component component = SearchEverywhereClassifier.EP_Manager.getListCellRendererComponent(
           list, value, index, isSelected, cellHasFocus);
         if (component == null) {
+          ListCellRenderer<? super Object> renderer = model.getRendererForIndex(index);
           //noinspection ConstantConditions
           //noinspection ConstantConditions
-          ListCellRenderer<? super Object> renderer = contributor.getElementsRenderer();
           component = SlowOperations.allowSlowOperations(
             () -> renderer.getListCellRendererComponent(list, value, index, isSelected, true)
           );
           component = SlowOperations.allowSlowOperations(
             () -> renderer.getListCellRendererComponent(list, value, index, isSelected, true)
           );
index da7cb07159c50a63192b7733f244e0618d1551ad..a0ec3a0e63e462944185034eb79becbc0701e323 100644 (file)
@@ -1,6 +1,10 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.ide.actions.searcheverywhere;
 
 package com.intellij.ide.actions.searcheverywhere;
 
+import com.intellij.util.concurrency.annotations.RequiresEdt;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
 import java.util.Comparator;
 
 /**
 import java.util.Comparator;
 
 /**
@@ -10,6 +14,7 @@ public class SearchEverywhereFoundElementInfo {
   public final int priority;
   public final Object element;
   public final SearchEverywhereContributor<?> contributor;
   public final int priority;
   public final Object element;
   public final SearchEverywhereContributor<?> contributor;
+  private ListCellRenderer<?> renderer;
 
   public SearchEverywhereFoundElementInfo(Object element, int priority, SearchEverywhereContributor<?> contributor) {
     this.priority = priority;
 
   public SearchEverywhereFoundElementInfo(Object element, int priority, SearchEverywhereContributor<?> contributor) {
     this.priority = priority;
@@ -29,6 +34,15 @@ public class SearchEverywhereFoundElementInfo {
     return contributor;
   }
 
     return contributor;
   }
 
+  @RequiresEdt
+  public @NotNull ListCellRenderer<?> getRenderer() {
+    var result = renderer;
+    if (result == null) {
+      result = renderer = contributor.getElementsRenderer();
+    }
+    return result;
+  }
+
   public static final Comparator<SearchEverywhereFoundElementInfo> COMPARATOR = (o1, o2) -> {
     int res = Integer.compare(o1.priority, o2.priority);
     if (res != 0) return res;
   public static final Comparator<SearchEverywhereFoundElementInfo> COMPARATOR = (o1, o2) -> {
     int res = Integer.compare(o1.priority, o2.priority);
     if (res != 0) return res;
index 05c839f3e664d379e8c4bfecf86c51d9ced57bb2..1dac40507bbfc3d9da984a6c343efab7586452c2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.ide.actions.searcheverywhere;
 
 import com.google.common.collect.Lists;
 package com.intellij.ide.actions.searcheverywhere;
 
 import com.google.common.collect.Lists;
@@ -97,6 +97,11 @@ abstract class SearchListModel extends AbstractListModel<Object> {
     return (SearchEverywhereContributor<Item>)listElements.get(index).getContributor();
   }
 
     return (SearchEverywhereContributor<Item>)listElements.get(index).getContributor();
   }
 
+  @SuppressWarnings("unchecked")
+  public @Nullable ListCellRenderer<? super Object> getRendererForIndex(int index) {
+    return (ListCellRenderer<? super Object>)listElements.get(index).getRenderer();
+  }
+
   @NotNull
   public List<SearchEverywhereFoundElementInfo> getFoundElementsInfo() {
     return ContainerUtil.filter(listElements, info -> info.element != MORE_ELEMENT);
   @NotNull
   public List<SearchEverywhereFoundElementInfo> getFoundElementsInfo() {
     return ContainerUtil.filter(listElements, info -> info.element != MORE_ELEMENT);