expand 'more' for classes inside SE result set

This commit is contained in:
Konstantin Bulenkov
2014-06-23 12:51:46 +04:00
parent 28183eb7a3
commit 93cf0e31a7
@@ -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<AtomicBoolean> ourPressed = Couple.of(new AtomicBoolean(false), new AtomicBoolean(false));
private final static Couple<AtomicBoolean> 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<VirtualFile> myAlreadyAddedFiles = new ArrayList<VirtualFile>();
private final ArrayList<AnAction> myAlreadyAddedActions = new ArrayList<AnAction>();
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<MatchResult> 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<java.lang.Object> actions = new HashSet<java.lang.Object>();
final Set<java.lang.Object> settings = new HashSet<java.lang.Object>();
final Set<Object> actions = new HashSet<Object>();
final Set<Object> settings = new HashSet<Object>();
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<java.lang.Object> elements = new LinkedHashSet<java.lang.Object>();
final Set<Object> elements = new LinkedHashSet<Object>();
final GlobalSearchScope scope = GlobalSearchScope.projectScope(project);
myFileChooseByName.getProvider().filterElements(myFileChooseByName, pattern, true,
myProgressIndicator, new Processor<java.lang.Object>() {
myProgressIndicator, new Processor<Object>() {
@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<java.lang.Object> files = new ArrayList<java.lang.Object>();
for (java.lang.Object object : elements) {
final List<Object> files = new ArrayList<Object>();
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<java.lang.Object> elements = new LinkedHashSet<java.lang.Object>();
final Set<Object> elements = new LinkedHashSet<Object>();
final GlobalSearchScope scope = GlobalSearchScope.projectScope(project);
mySymbolsChooseByName.getProvider().filterElements(mySymbolsChooseByName, pattern, false,
myProgressIndicator, new Processor<java.lang.Object>() {
myProgressIndicator, new Processor<Object>() {
@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<java.lang.Object> symbols = new ArrayList<java.lang.Object>();
for (java.lang.Object object : elements) {
final List<Object> symbols = new ArrayList<Object>();
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<java.lang.Object> runConfigurations = new ArrayList<java.lang.Object>();
final List<Object> runConfigurations = new ArrayList<Object>();
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<java.lang.Object> elements = new LinkedHashSet<java.lang.Object>();
myClassChooseByName.getProvider().filterElements(myClassChooseByName, pattern, includeLibs,
myProgressIndicator, new Processor<java.lang.Object>() {
@Override
public boolean process(java.lang.Object o) {
elements.add(o);
return elements.size() < 30;
}
});
final List<java.lang.Object> classes = new ArrayList<java.lang.Object>();
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<Object> 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<Object> getClasses(String pattern, boolean includeLibs, final int max) {
int counter = 0;
final Set<Object> elements = new LinkedHashSet<Object>();
myClassChooseByName.getProvider().filterElements(myClassChooseByName, pattern, includeLibs,
myProgressIndicator, new Processor<Object>() {
@Override
public boolean process(Object o) {
if (o instanceof PsiElement && !myListModel.contains(o)) {
elements.add(o);
}
return elements.size() < max;
}
});
final List<Object> classes = new ArrayList<Object>();
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<java.lang.Object> elements = new ArrayList<java.lang.Object>();
final List<Object> elements = new ArrayList<Object>();
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<java.lang.Object> consumer = new Consumer<java.lang.Object>() {
final Consumer<Object> consumer = new Consumer<Object>() {
@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<Object> 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;