summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java
diff options
context:
space:
mode:
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.java45
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,