int (LookupElementListPresenter lookup, List<? extends LookupElement> items, boolean onExplicitAction, @Nullable LookupElement mostRelevant) { if (items.isEmpty() || lookup.getLookupFocusDegree() == LookupFocusDegree.UNFOCUSED) { return 0; } if (lookup.isSelectionTouched() || !onExplicitAction) { final LookupElement lastSelection = lookup.getCurrentItem(); int old = ContainerUtil.indexOfIdentity(items, lastSelection); if (old >= 0) { return old; } LookupElement selectedValue = lookup.getCurrentItemOrEmpty(); if (selectedValue instanceof EmptyLookupItem && ((EmptyLookupItem)selectedValue).isLoading()) { int index = lookup.getSelectedIndex(); if (index >= 0 && index < items.size()) { return index; } } for (int i = 0; i < items.size(); i++) { LookupElementPresentation p1 = getDefaultPresentation(items.get(i)); LookupElementPresentation p2 = lastSelection == null ? null : getDefaultPresentation(lastSelection); if (p1 != null && p2 != null && PRESENTATION_COMPARATOR.compare(p1, p2) == 0) { return i; } } } LookupElement exactMatch = getBestExactMatch(items); return Math.max(0, ContainerUtil.indexOfIdentity(items, exactMatch != null ? exactMatch : mostRelevant)); }