diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 3a1f04b80414..9a71909fcca8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -372,31 +372,34 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable, checkValid(); CollectionListModel<LookupElement> listModel = getListModel(); - synchronized (myList) { - Pair<List<LookupElement>, Integer> pair = myPresentableArranger.arrangeItems(this, onExplicitAction || reused); - List<LookupElement> items = pair.first; - Integer toSelect = pair.second; - if (toSelect == null || toSelect < 0 || items.size() > 0 && toSelect >= items.size()) { - LOG.error("Arranger " + myPresentableArranger + " returned invalid selection index=" + toSelect + "; items=" + items); - } - - myOffsets.checkMinPrefixLengthChanges(items, this); - List<LookupElement> oldModel = listModel.toList(); - listModel.removeAll(); - if (!items.isEmpty()) { - listModel.add(items); - } - else { - addEmptyItem(listModel); - } + Pair<List<LookupElement>, Integer> pair; + synchronized (myList) { + pair = myPresentableArranger.arrangeItems(this, onExplicitAction || reused); + } + + List<LookupElement> items = pair.first; + Integer toSelect = pair.second; + if (toSelect == null || toSelect < 0 || items.size() > 0 && toSelect >= items.size()) { + LOG.error("Arranger " + myPresentableArranger + " returned invalid selection index=" + toSelect + "; items=" + items); + toSelect = 0; + } - updateListHeight(listModel); + myOffsets.checkMinPrefixLengthChanges(items, this); + List<LookupElement> oldModel = listModel.toList(); - myList.setSelectedIndex(toSelect); - return !ContainerUtil.equalsIdentity(oldModel, items); + listModel.removeAll(); + if (!items.isEmpty()) { + listModel.add(items); } + else { + addEmptyItem(listModel); + } + + updateListHeight(listModel); + myList.setSelectedIndex(toSelect); + return !ContainerUtil.equalsIdentity(oldModel, items); } private boolean isSelectionVisible() { @@ -566,7 +569,7 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable, public void perform(Caret caret) { EditorModificationUtil.deleteSelectedText(hostEditor); final int caretOffset = hostEditor.getCaretModel().getOffset(); - int lookupStart = caretOffset - prefix; + int lookupStart = Math.max(caretOffset - prefix, 0); int len = hostEditor.getDocument().getTextLength(); LOG.assertTrue(lookupStart >= 0 && lookupStart <= len, |