From 2f90c39631ad39f33aec0f0487a281184a43a7f6 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 7 Feb 2011 12:48:45 +0100 Subject: [PATCH] autopopup sometimes showed no suggestions --- .../completion/JavaAutoPopupTest.groovy | 16 ++++++++++++++++ .../lookup/impl/BackspaceHandler.java | 11 +++++------ .../codeInsight/lookup/impl/LookupImpl.java | 6 ++++-- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 91358a78ea48..658c03401b20 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -460,5 +460,21 @@ class JavaAutoPopupTest extends CompletionAutoPopupTestCase { assert lookup } + public void testHideOnInvalidSymbolAfterBackspace() { + myFixture.configureByText("a.java", """ + class A { + Object foo() { this } + } + """) + type '.' + assert lookup + type 'c' + assert lookup + type '\b' + assert lookup + type 'x' + assert !lookup + } + } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java index fb95e19ed5b9..9b77ae0ddd89 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java @@ -16,9 +16,8 @@ package com.intellij.codeInsight.lookup.impl; -import com.intellij.codeInsight.completion.CompletionProcess; import com.intellij.codeInsight.completion.CompletionProgressIndicator; -import com.intellij.codeInsight.completion.CompletionService; +import com.intellij.codeInsight.completion.impl.CompletionServiceImpl; import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; @@ -45,14 +44,14 @@ public class BackspaceHandler extends EditorActionHandler { } }); - if (lookup.truncatePrefix()) { + final CompletionProgressIndicator process = CompletionServiceImpl.getCompletionService().getCurrentCompletion(); + if (lookup.truncatePrefix(process == null || !process.isAutopopupCompletion())) { return; } if (lookup.getLookupStart() < editor.getCaretModel().getOffset()) { - final CompletionProcess process = CompletionService.getCompletionService().getCurrentCompletion(); - if (process instanceof CompletionProgressIndicator) { - ((CompletionProgressIndicator)process).scheduleRestart(); + if (process != null) { + process.scheduleRestart(); return; } } 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 7b334b63176a..a6f963b4775a 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 @@ -317,11 +317,13 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { ListScrollingUtil.ensureIndexIsVisible(myList, myList.getSelectedIndex(), 1); } - public boolean truncatePrefix() { + public boolean truncatePrefix(boolean preserveSelection) { final int len = myAdditionalPrefix.length(); if (len == 0) return false; - markSelectionTouched(); + if (preserveSelection) { + markSelectionTouched(); + } myAdditionalPrefix = myAdditionalPrefix.substring(0, len - 1); myInitialPrefix = null;