diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java index 8dc0b3e536ea..6499e8fc6a4a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java @@ -416,7 +416,6 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); caretRight(); - type(" "); doHighlighting(); @@ -518,6 +517,7 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); try { + type(" "); List errs = highlightErrors(); assertEmpty(errs); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java index b001701b6d8e..a7935955513b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java @@ -2,6 +2,7 @@ package com.intellij.codeInsight.daemon.impl; +import com.intellij.codeHighlighting.Pass; import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.codeInsight.daemon.DaemonBundle; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; @@ -40,6 +41,7 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass { private final int myStartOffset; private final int myEndOffset; + private final boolean hasDirtyTextRange; ShowAutoImportPass(@NotNull Project project, @NotNull final PsiFile file, @NotNull Editor editor) { super(project, editor.getDocument(), false); @@ -52,6 +54,8 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass { myEndOffset = range.getEndOffset(); myFile = file; + + hasDirtyTextRange = FileStatusMap.getDirtyTextRange(editor, Pass.UPDATE_ALL) != null; } @Override @@ -72,7 +76,7 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass { int caretOffset = myEditor.getCaretModel().getOffset(); importUnambiguousImports(caretOffset); - List visibleHighlights = getVisibleHighlights(myStartOffset, myEndOffset, myProject, myEditor); + List visibleHighlights = getVisibleHighlights(myStartOffset, myEndOffset, myProject, myEditor, hasDirtyTextRange); for (int i = visibleHighlights.size() - 1; i >= 0; i--) { HighlightInfo info = visibleHighlights.get(i); @@ -115,9 +119,15 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass { private static List getVisibleHighlights(final int startOffset, final int endOffset, @NotNull Project project, - @NotNull Editor editor) { + @NotNull Editor editor, + boolean isDirty) { final List highlights = new ArrayList<>(); + int offset = editor.getCaretModel().getOffset(); DaemonCodeAnalyzerEx.processHighlights(editor.getDocument(), project, null, startOffset, endOffset, info -> { + //no changes after escape => suggest imports under caret only + if (!isDirty && !info.getFixTextRange().contains(offset)) { + return true; + } if (info.hasHint() && !editor.getFoldingModel().isOffsetCollapsed(info.startOffset)) { highlights.add(info); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPassFactory.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPassFactory.java index d698a6faebf6..e24509872af6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPassFactory.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPassFactory.java @@ -2,10 +2,8 @@ package com.intellij.codeInsight.daemon.impl; import com.intellij.codeHighlighting.*; -import com.intellij.codeInsight.intention.impl.BaseIntentionAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,10 +17,6 @@ final class ShowAutoImportPassFactory implements TextEditorHighlightingPassFacto @Override @Nullable public TextEditorHighlightingPass createHighlightingPass(@NotNull PsiFile file, @NotNull final Editor editor) { - if (BaseIntentionAction.canModify(file)) { - TextRange textRange = FileStatusMap.getDirtyTextRange(editor, Pass.UPDATE_ALL); - return textRange != null ? new ShowAutoImportPass(file.getProject(), file, editor) : null; - } - return null; + return DaemonListeners.canChangeFileSilently(file) ? new ShowAutoImportPass(file.getProject(), file, editor) : null; } }