diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index 9e5b5ed12379..688d69fdd467 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -117,6 +117,7 @@ import java.util.concurrent.atomic.AtomicLong; /** * @author Konstantin Bulenkov */ +@SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized") public class SearchEverywhereAction extends AnAction implements CustomComponentAction, DumbAware{ public static final String SE_HISTORY_KEY = "SearchEverywhereHistoryKey"; public static final int SEARCH_FIELD_COLUMNS = 25; @@ -128,6 +129,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private static final int MAX_SETTINGS = 5; private static final int MAX_ACTIONS = 5; private static final int MAX_RECENT_FILES = 10; + private static final int DEFAULT_MORE_STEP_COUNT = 15; public static final int MAX_SEARCH_EVERYWHERE_HISTORY = 50; private static final int POPUP_MAX_WIDTH = 600; private static final Logger LOG = Logger.getInstance("#" + SearchEverywhereAction.class.getName()); @@ -149,7 +151,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private JCheckBox myNonProjectCheckBox; private AnActionEvent myActionEvent; private Component myContextComponent; - private Object myCalcThread; + private CalcThread myCalcThread; private static AtomicBoolean ourShiftIsPressed = new AtomicBoolean(false); private final static Couple ourPressed = Couple.of(new AtomicBoolean(false), new AtomicBoolean(false)); private final static Couple ourReleased = Couple.of(new AtomicBoolean(false), new AtomicBoolean(false)); @@ -519,7 +521,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA return myPopupField; } - private void doNavigate(int index) { + private void doNavigate(final int index) { final Project project = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(getField().getTextEditor())); final Executor executor = ourShiftIsPressed.get() ? DefaultRunExecutor.getRunExecutorInstance() @@ -528,11 +530,23 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA final SearchListModel model = getModel(); if (isMoreItem(index)) { String actionId = null; - if (index == model.myMoreClassesIndex) actionId = "GotoClass"; - else if (index == model.myMoreFilesIndex) actionId = "GotoFile"; - else if (index == model.myMoreSettingsIndex) actionId = "ShowSettings"; - else if (index == model.myMoreActionsIndex) actionId = "GotoAction"; - else if (index == model.myMoreSymbolsIndex) actionId = "GotoSymbol"; + if (index == model.myMoreIndexes.myMoreClassesIndex) { + final String pattern = myPopupField.getText(); + myCurrentWorker.doWhenProcessed(new Runnable() { + @Override + public void run() { + myCalcThread = new CalcThread(project, pattern, true); + myPopupActualWidth = 0; + myCurrentWorker = myCalcThread.insertClasses(index); + } + }); + + return; + } + else if (index == model.myMoreIndexes.myMoreFilesIndex) actionId = "GotoFile"; + else if (index == model.myMoreIndexes.myMoreSettingsIndex) actionId = "ShowSettings"; + else if (index == model.myMoreIndexes.myMoreActionsIndex) actionId = "GotoAction"; + else if (index == model.myMoreIndexes.myMoreSymbolsIndex) actionId = "GotoSymbol"; if (actionId != null) { final AnAction action = ActionManager.getInstance().getAction(actionId); GotoActionAction.openOptionOrPerformAction(action, getField().getText(), project, getField(), myActionEvent); @@ -549,7 +563,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } } final String pattern = getField().getText(); - final java.lang.Object value = myList.getSelectedValue(); + final Object value = myList.getSelectedValue(); saveHistory(project, pattern, value); IdeFocusManager focusManager = IdeFocusManager.findInstanceByComponent(getField().getTextEditor()); if (myPopup != null && myPopup.isVisible()) { @@ -616,11 +630,11 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private boolean isMoreItem(int index) { final SearchListModel model = getModel(); - return index == model.myMoreClassesIndex || - index == model.myMoreFilesIndex || - index == model.myMoreSettingsIndex || - index == model.myMoreActionsIndex || - index == model.myMoreSymbolsIndex; + return index == model.myMoreIndexes.myMoreClassesIndex || + index == model.myMoreIndexes.myMoreFilesIndex || + index == model.myMoreIndexes.myMoreSettingsIndex || + index == model.myMoreIndexes.myMoreActionsIndex || + index == model.myMoreIndexes.myMoreSymbolsIndex; } private void rebuildList(final String pattern) { @@ -638,7 +652,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA myCurrentWorker.doWhenProcessed(new Runnable() { @Override public void run() { - myCalcThread = new Object(project, pattern); + myCalcThread = new CalcThread(project, pattern, false); myPopupActualWidth = 0; myCurrentWorker = myCalcThread.start(); } @@ -784,7 +798,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA FeatureUsageTracker.getInstance().triggerFeatureUsed(IdeActions.ACTION_SEARCH_EVERYWHERE); } - private static void saveHistory(Project project, String text, java.lang.Object value) { + private static void saveHistory(Project project, String text, Object value) { if (project == null || project.isDisposed() || !project.isInitialized()) { return; } @@ -838,8 +852,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA DataManager.registerDataProvider(panel, new DataProvider() { @Nullable @Override - public java.lang.Object getData(@NonNls String dataId) { - final java.lang.Object value = myList.getSelectedValue(); + public Object getData(@NonNls String dataId) { + final Object value = myList.getSelectedValue(); if (CommonDataKeys.PSI_ELEMENT.is(dataId) && value instanceof PsiElement) { return value; } else if (CommonDataKeys.VIRTUAL_FILE.is(dataId) && value instanceof VirtualFile) { @@ -938,7 +952,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA @Nullable @Override - public java.lang.Object getData(@NonNls String dataId) { + public Object getData(@NonNls String dataId) { if (PlatformDataKeys.PREDEFINED_TEXT.is(dataId)) { return getTextEditor().getText(); } @@ -953,7 +967,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private class MyListRenderer extends ColoredListCellRenderer { ColoredListCellRenderer myLocation = new ColoredListCellRenderer() { @Override - protected void customizeCellRenderer(JList list, java.lang.Object value, int index, boolean selected, boolean hasFocus) { + protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { setPaintFocusBorder(false); append(myLocationString, SimpleTextAttributes.GRAYED_ATTRIBUTES); setIcon(myLocationIcon); @@ -983,7 +997,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } @Override - public Component getListCellRendererComponent(JList list, java.lang.Object value, int index, boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component cmp; PsiFile file = null; myLocationString = null; @@ -1042,7 +1056,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } @Override - protected void customizeCellRenderer(JList list, java.lang.Object value, int index, boolean selected, boolean hasFocus) { + protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { setPaintFocusBorder(false); setIcon(EmptyIcon.ICON_16); AccessToken token = ApplicationManager.getApplication().acquireReadActionLock(); @@ -1174,19 +1188,19 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA }, 50); } - private static boolean isActionValue(java.lang.Object o) { + private static boolean isActionValue(Object o) { return o instanceof GotoActionModel.ActionWrapper || o instanceof AnAction; } - private static boolean isSetting(java.lang.Object o) { + private static boolean isSetting(Object o) { return o instanceof OptionDescription; } - private static boolean isRunConfiguration(java.lang.Object o) { + private static boolean isRunConfiguration(Object o) { return o instanceof ChooseRunConfigurationPopup.ItemWrapper; } - private static boolean isVirtualFile(java.lang.Object o) { + private static boolean isVirtualFile(Object o) { return o instanceof VirtualFile; } @@ -1195,19 +1209,20 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } @SuppressWarnings("SSBasedInspection") - private class Object implements Runnable { + private class CalcThread implements Runnable { private final Project project; private final String pattern; private final ProgressIndicator myProgressIndicator = new ProgressIndicatorBase(); private final ActionCallback myDone = new ActionCallback(); - private final SearchListModel myListModel = new SearchListModel(); + private final SearchListModel myListModel; private final ArrayList myAlreadyAddedFiles = new ArrayList(); private final ArrayList myAlreadyAddedActions = new ArrayList(); - public Object(Project project, String pattern) { + public CalcThread(Project project, String pattern, boolean reuseModel) { this.project = project; this.pattern = pattern; + myListModel = reuseModel ? (SearchListModel)myList.getModel() : new SearchListModel(); } @Override @@ -1249,7 +1264,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA }, true); runReadAction(new Runnable() { public void run() { - buildClasses(pattern, false); + buildClasses(pattern); } }, true); runReadAction(new Runnable() { @@ -1309,8 +1324,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA List matches = collectResults(pattern, myActions, myActionModel); for (MatchResult o : matches) { check(); - java.lang.Object[] objects = myActionModel.getElementsByName(o.elementName, true, pattern); - for (java.lang.Object object : objects) { + Object[] objects = myActionModel.getElementsByName(o.elementName, true, pattern); + for (Object object : objects) { check(); if (isToolWindowAction(object) && toolWindows.size() < MAX_TOOL_WINDOWS) { toolWindows.add(((GotoActionModel.ActionWrapper)object).getAction()); @@ -1326,7 +1341,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA if (isCanceled()) return; if (toolWindows.size() > 0) { myListModel.myTitleIndexes.toolWindows = myListModel.size(); - for (java.lang.Object toolWindow : toolWindows) { + for (Object toolWindow : toolWindows) { myListModel.addElement(toolWindow); } } @@ -1335,8 +1350,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } private synchronized void buildActionsAndSettings(String pattern) { - final Set actions = new HashSet(); - final Set settings = new HashSet(); + final Set actions = new HashSet(); + final Set settings = new HashSet(); final MinusculeMatcher matcher = new MinusculeMatcher("*" +pattern, NameUtil.MatchingCaseSensitivity.NONE); if (myActions == null) { if (myActionModel == null) { @@ -1349,8 +1364,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA for (MatchResult o : matches) { check(); - java.lang.Object[] objects = myActionModel.getElementsByName(o.elementName, true, pattern); - for (java.lang.Object object : objects) { + Object[] objects = myActionModel.getElementsByName(o.elementName, true, pattern); + for (Object object : objects) { check(); if (isSetting(object) && settings.size() < MAX_SETTINGS) { if (matcher.matches(getSettingText((OptionDescription)object))) { @@ -1371,30 +1386,30 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA if (isCanceled()) return; if (actions.size() > 0) { myListModel.myTitleIndexes.actions = myListModel.size(); - for (java.lang.Object action : actions) { + for (Object action : actions) { myListModel.addElement(action); } } - myListModel.myMoreActionsIndex = actions.size() >= MAX_ACTIONS ? myListModel.size() - 1 : -1; + myListModel.myMoreIndexes.myMoreActionsIndex = actions.size() >= MAX_ACTIONS ? myListModel.size() - 1 : -1; if (settings.size() > 0) { myListModel.myTitleIndexes.settings = myListModel.size(); - for (java.lang.Object setting : settings) { + for (Object setting : settings) { myListModel.addElement(setting); } } - myListModel.myMoreSettingsIndex = settings.size() >= MAX_SETTINGS ? myListModel.size() - 1 : -1; + myListModel.myMoreIndexes.myMoreSettingsIndex = settings.size() >= MAX_SETTINGS ? myListModel.size() - 1 : -1; } }); } private synchronized void buildFiles(final String pattern) { int filesCounter = 0; - final Set elements = new LinkedHashSet(); + final Set elements = new LinkedHashSet(); final GlobalSearchScope scope = GlobalSearchScope.projectScope(project); myFileChooseByName.getProvider().filterElements(myFileChooseByName, pattern, true, - myProgressIndicator, new Processor() { + myProgressIndicator, new Processor() { @Override - public boolean process(java.lang.Object o) { + public boolean process(Object o) { VirtualFile file = null; if (o instanceof VirtualFile) { file = (VirtualFile)o; @@ -1411,8 +1426,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA return elements.size() < 30; } }); - final List files = new ArrayList(); - for (java.lang.Object object : elements) { + final List files = new ArrayList(); + for (Object object : elements) { if (filesCounter > MAX_FILES) break; if (!myListModel.contains(object)) { if (object instanceof PsiFile) { @@ -1439,10 +1454,10 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void run() { if (isCanceled()) return; myListModel.myTitleIndexes.files = myListModel.size(); - for (java.lang.Object file : files) { + for (Object file : files) { myListModel.addElement(file); } - myListModel.myMoreFilesIndex = files.size() >= MAX_FILES ? myListModel.size() - 1 : -1; + myListModel.myMoreIndexes.myMoreFilesIndex = files.size() >= MAX_FILES ? myListModel.size() - 1 : -1; } }); } @@ -1451,12 +1466,12 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA private synchronized void buildSymbols(final String pattern) { check(); int symbolsCounter = 0; - final Set elements = new LinkedHashSet(); + final Set elements = new LinkedHashSet(); final GlobalSearchScope scope = GlobalSearchScope.projectScope(project); mySymbolsChooseByName.getProvider().filterElements(mySymbolsChooseByName, pattern, false, - myProgressIndicator, new Processor() { + myProgressIndicator, new Processor() { @Override - public boolean process(java.lang.Object o) { + public boolean process(Object o) { if (o instanceof PsiElement) { final PsiElement element = (PsiElement)o; final PsiFile file = element.getContainingFile(); @@ -1467,8 +1482,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA return elements.size() < 30; } }); - final List symbols = new ArrayList(); - for (java.lang.Object object : elements) { + final List symbols = new ArrayList(); + for (Object object : elements) { if (symbolsCounter > MAX_SYMBOLS) break; if (!myListModel.contains(object)) { symbols.add(object); @@ -1485,10 +1500,10 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void run() { if (isCanceled()) return; myListModel.myTitleIndexes.symbols = myListModel.size(); - for (java.lang.Object file : symbols) { + for (Object file : symbols) { myListModel.addElement(file); } - myListModel.myMoreSymbolsIndex = symbols.size() >= MAX_SYMBOLS ? myListModel.size() - 1 : -1; + myListModel.myMoreIndexes.myMoreSymbolsIndex = symbols.size() >= MAX_SYMBOLS ? myListModel.size() - 1 : -1; } }); } @@ -1513,7 +1528,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } private synchronized void buildRunConfigurations(String pattern) { - final List runConfigurations = new ArrayList(); + final List runConfigurations = new ArrayList(); MinusculeMatcher matcher = new MinusculeMatcher(pattern, NameUtil.MatchingCaseSensitivity.NONE); final ChooseRunConfigurationPopup.ItemWrapper[] wrappers = ChooseRunConfigurationPopup.createSettingsList(project, new ExecutorProvider() { @@ -1536,7 +1551,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void run() { if (isCanceled()) return; myListModel.myTitleIndexes.runConfigurations = myListModel.size(); - for (java.lang.Object runConfiguration : runConfigurations) { + for (Object runConfiguration : runConfigurations) { myListModel.addElement(runConfiguration); } } @@ -1545,36 +1560,15 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } - private synchronized void buildClasses(final String pattern, boolean includeLibraries) { + private synchronized void buildClasses(final String pattern) { if (pattern.indexOf('.') != -1) { //todo[kb] it's not a mistake. If we search for "*.png" or "index.xml" in SearchEverywhere //todo[kb] we don't want to see Java classes started with Png or Xml. This approach should be reworked someday. return; } check(); - boolean includeLibs = includeLibraries || showAll.get(); - int filesCounter = 0; - final Set elements = new LinkedHashSet(); - myClassChooseByName.getProvider().filterElements(myClassChooseByName, pattern, includeLibs, - myProgressIndicator, new Processor() { - @Override - public boolean process(java.lang.Object o) { - elements.add(o); - return elements.size() < 30; - } - }); - final List classes = new ArrayList(); - for (java.lang.Object object : elements) { - check(); - if (filesCounter > MAX_FILES) break; - if (!myListModel.contains(object)) { - if (object instanceof PsiElement) { - classes.add(object); - } - filesCounter++; - if (filesCounter > MAX_FILES) break; - } - } + + final List classes = getClasses(pattern, showAll.get(), MAX_CLASSES); check(); @@ -1584,17 +1578,44 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void run() { if (isCanceled()) return; myListModel.myTitleIndexes.classes = myListModel.size(); - for (java.lang.Object file : classes) { + for (Object file : classes) { myListModel.addElement(file); } - myListModel.myMoreClassesIndex = classes.size() >= MAX_CLASSES ? myListModel.size() - 1 : -1; + myListModel.myMoreIndexes.myMoreClassesIndex = classes.size() >= MAX_CLASSES ? myListModel.size() - 1 : -1; } }); - } else { - if (!includeLibs) { - buildClasses(pattern, true); + } + } + + private List getClasses(String pattern, boolean includeLibs, final int max) { + int counter = 0; + final Set elements = new LinkedHashSet(); + myClassChooseByName.getProvider().filterElements(myClassChooseByName, pattern, includeLibs, + myProgressIndicator, new Processor() { + @Override + public boolean process(Object o) { + if (o instanceof PsiElement && !myListModel.contains(o)) { + elements.add(o); + } + return elements.size() < max; + } + }); + final List classes = new ArrayList(); + for (Object object : elements) { + check(); + if (counter > max) break; + if (!myListModel.contains(object)) { + if (object instanceof PsiElement) { + classes.add(object); + } + counter++; + if (counter > max) break; } } + if (!includeLibs && classes.isEmpty()) { + return getClasses(pattern, true, max); + } + return classes; } private synchronized void buildRecentFiles(String pattern) { @@ -1618,7 +1639,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void run() { if (isCanceled()) return; myListModel.myTitleIndexes.recentFiles = myListModel.size(); - for (java.lang.Object file : files) { + for (Object file : files) { myListModel.addElement(file); } } @@ -1631,7 +1652,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } private synchronized void buildTopHit(String pattern) { - final List elements = new ArrayList(); + final List elements = new ArrayList(); final HistoryItem history = myHistoryItem; if (history != null) { final HistoryType type = parseHistoryType(history.type); @@ -1696,9 +1717,9 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } } } - final Consumer consumer = new Consumer() { + final Consumer consumer = new Consumer() { @Override - public void consume(java.lang.Object o) { + public void consume(Object o) { if (isSetting(o) || isVirtualFile(o) || isActionValue(o) || o instanceof PsiElement) { if (o instanceof AnAction && myAlreadyAddedActions.contains(o)) { return; @@ -1725,7 +1746,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA if (isCanceled()) return; - for (java.lang.Object element : elements.toArray()) { + for (Object element : elements.toArray()) { if (element instanceof AnAction) { final AnAction action = (AnAction)element; final AnActionEvent e = new AnActionEvent(myActionEvent.getInputEvent(), @@ -1744,7 +1765,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } if (isCanceled() || elements.isEmpty()) return; myListModel.myTitleIndexes.topHit = myListModel.size(); - for (java.lang.Object element : elements) { + for (Object element : elements) { myListModel.addElement(element); } } @@ -1912,6 +1933,52 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA return myDone; } + public ActionCallback insertClasses(final int index) { + ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { + public void run() { + runReadAction(new Runnable() { + @Override + public void run() { + try { + final List classes = getClasses(pattern, showAll.get(), DEFAULT_MORE_STEP_COUNT); + System.out.println(classes.size()); + check(); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + try { + int shift = 0; + int i = index; + for (Object aClass : classes) { + //noinspection unchecked + myListModel.insertElementAt(aClass, i); + shift++; + i++; + } + myListModel.myTitleIndexes.shift(index, shift); + myListModel.myMoreIndexes.shift(index, shift); + if (classes.size() < DEFAULT_MORE_STEP_COUNT) { + myListModel.myMoreIndexes.myMoreClassesIndex = -1; + } + ListScrollingUtil.selectItem(myList, index); + myDone.setDone(); + } + catch (Exception e) { + myDone.setRejected(); + } + } + }); + } + catch (Exception e) { + myDone.setRejected(); + } + } + }, true); + } + }); + return myDone; + } + public ActionCallback start() { ApplicationManager.getApplication().executeOnPooledThread(this); return myDone; @@ -2039,7 +2106,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } - private static boolean isToolWindowAction(java.lang.Object o) { + private static boolean isToolWindowAction(Object o) { return isActionValue(o) && o instanceof GotoActionModel.ActionWrapper && ((GotoActionModel.ActionWrapper)o).getAction() instanceof ActivateToolWindowAction; @@ -2061,6 +2128,22 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } } + static class MoreIndexes { + volatile int myMoreClassesIndex = -1; + volatile int myMoreFilesIndex = -1; + volatile int myMoreActionsIndex = -1; + volatile int myMoreSettingsIndex = -1; + volatile int myMoreSymbolsIndex = -1; + + public void shift(int index, int shift) { + if (myMoreClassesIndex >= index) myMoreClassesIndex += shift; + if (myMoreFilesIndex >= index) myMoreFilesIndex += shift; + if (myMoreActionsIndex >= index) myMoreActionsIndex += shift; + if (myMoreSettingsIndex >= index) myMoreSettingsIndex += shift; + if (myMoreSymbolsIndex >= index) myMoreSymbolsIndex += shift; + } + } + static class TitleIndexes { volatile int topHit = -1; volatile int recentFiles = -1; @@ -2143,6 +2226,16 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA settings = -1; toolWindows = -1; } + + public void shift(int index, int shift) { + if (toolWindows != - 1 && toolWindows > index) toolWindows += shift; + if (settings != - 1 && settings > index) settings += shift; + if (actions != - 1 && actions > index) actions += shift; + if (files != - 1 && files > index) files += shift; + if (classes != - 1 && classes > index) classes += shift; + if (runConfigurations != - 1 && runConfigurations > index) runConfigurations += shift; + if (symbols != - 1 && symbols > index) symbols += shift; + } } @SuppressWarnings("unchecked") @@ -2150,12 +2243,8 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA @SuppressWarnings("UseOfObsoleteCollectionType") Vector myDelegate; - volatile int myMoreClassesIndex = -1; - volatile int myMoreFilesIndex = -1; - volatile int myMoreActionsIndex = -1; - volatile int myMoreSettingsIndex = -1; - volatile int myMoreSymbolsIndex = -1; volatile TitleIndexes myTitleIndexes = new TitleIndexes(); + volatile MoreIndexes myMoreIndexes = new MoreIndexes(); private SearchListModel() { super(); @@ -2169,7 +2258,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } @Override - public void addElement(java.lang.Object obj) { + public void addElement(Object obj) { myDelegate.add(obj); } @@ -2237,7 +2326,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } @Override - public boolean equals(java.lang.Object o) { + public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false;