From 3d4169aec4612656ee2da36f5e1d868be245a567 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 14 Dec 2015 13:26:42 +0300 Subject: [PATCH] IDEA-149192 Blinking "Run Tests" gutter icon --- .../impl/DaemonRespondToChangesTest.java | 49 +++++++++++++++++++ .../lineMarker/RunLineMarkerProvider.java | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java index eafe7f02d095..558828acda8d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java @@ -739,6 +739,55 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { assertEquals(lineMarkersAfter.size(), lineMarkers.size()); } + public void testLineMarkersDoNotBlinkOnBackSpaceRightBeforeMethodIdentifier() throws Throwable { + configureByText(JavaFileType.INSTANCE, "package x; \n" + + "class ToRun{\n" + + " public static void main(String[] args) {\n"+ + " }\n"+ + "}"); + + List errors = highlightErrors(); + assertEmpty(errors); + + List lineMarkers = DaemonCodeAnalyzerImpl.getLineMarkers(myEditor.getDocument(), getProject()); + assertSize(2, lineMarkers); + + backspace(); + + final Collection changed = new ArrayList<>(); + MarkupModelEx modelEx = (MarkupModelEx)DocumentMarkupModel.forDocument(getDocument(getFile()), getProject(), true); + modelEx.addMarkupModelListener(getTestRootDisposable(), new MarkupModelListener() { + @Override + public void afterAdded(@NotNull RangeHighlighterEx highlighter) { + changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("after added"))); + } + + @Override + public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) { + changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("before removed"))); + } + + @Override + public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { + changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("changed"))); + } + + private void changed(@NotNull RangeHighlighterEx highlighter, String reason) { + if (highlighter.getTargetArea() != HighlighterTargetArea.LINES_IN_RANGE) return; // not line marker + List lineMarkers = DaemonCodeAnalyzerImpl.getLineMarkers(myEditor.getDocument(), getProject()); + if (ContainerUtil.find(lineMarkers, lm -> lm.highlighter == highlighter) == null) return; // not line marker + + changed.add(highlighter+": \n"+reason); + } + }); + + assertEmpty(highlightErrors()); + + assertSize(2, DaemonCodeAnalyzerImpl.getLineMarkers(myEditor.getDocument(), getProject())); + + assertEmpty(changed); + } + public void testLineMarkersClearWhenTypingAtTheEndOfPsiComment() throws Throwable { configureByText(JavaFileType.INSTANCE, "class S {\n//ddd\n}"); final LineMarkerProvider provider = new LineMarkerProvider() { diff --git a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java index 494e95813845..896c34cebb9e 100644 --- a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java +++ b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerProvider.java @@ -82,7 +82,7 @@ public class RunLineMarkerProvider extends LineMarkerProviderDescriptor { return tooltip.length() == 0 ? null : tooltip.toString(); } }; - return new LineMarkerInfo(element, element.getTextOffset(), icon, Pass.UPDATE_ALL, + return new LineMarkerInfo(element, element.getTextRange(), icon, Pass.UPDATE_ALL, tooltipProvider, null, GutterIconRenderer.Alignment.CENTER) { @Nullable