From c8b9a684506d798b208f8a3ad152c4ae685526e3 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 7 Aug 2017 13:07:42 +0200 Subject: [PATCH] logging around daemon execution in tests to hopefully help a bit the next time it's canceled for a mysterious reason --- .../codeInsight/daemon/impl/analysis/RefCountHolder.java | 1 + .../intellij/openapi/progress/util/ProgressWrapper.java | 9 +++++++++ .../fixtures/impl/CodeInsightTestFixtureImpl.java | 6 +++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java index 6cc37df4c4f0..7fd16c8e05b9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java @@ -308,6 +308,7 @@ class RefCountHolder { ProgressIndicator result; if (myState.compareAndSet(EMPTY, indicator)) { if (!file.getTextRange().equals(dirtyScope)) { + log(" RefCountHolder: invalid scope " + dirtyScope); // empty holder needs filling before it can be used, so restart daemon to re-analyze the whole file myState.set(EMPTY); return false; diff --git a/platform/core-impl/src/com/intellij/openapi/progress/util/ProgressWrapper.java b/platform/core-impl/src/com/intellij/openapi/progress/util/ProgressWrapper.java index 7ee4f747a25f..57459fb0046a 100644 --- a/platform/core-impl/src/com/intellij/openapi/progress/util/ProgressWrapper.java +++ b/platform/core-impl/src/com/intellij/openapi/progress/util/ProgressWrapper.java @@ -68,6 +68,15 @@ public class ProgressWrapper extends AbstractProgressIndicatorBase implements Wr } } + @Nullable + @Override + protected Throwable getCancellationTrace() { + if (myOriginal instanceof AbstractProgressIndicatorBase) { + return ((AbstractProgressIndicatorBase)myOriginal).getCancellationTrace(); + } + return super.getCancellationTrace(); + } + private boolean isCanceledRaw() { return super.isCanceled(); } private void checkCanceledRaw() { super.checkCanceled(); } diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 18c532627fc8..e96852b82cb0 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -207,7 +207,8 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig DaemonCodeAnalyzerSettings settings = DaemonCodeAnalyzerSettings.getInstance(); ProcessCanceledException exception = null; - for (int i = 0; i < 1000; i++) { + int retries = 1000; + for (int i = 0; i < retries; i++) { int oldDelay = settings.AUTOREPARSE_DELAY; try { settings.AUTOREPARSE_DELAY = 0; @@ -231,8 +232,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig settings.AUTOREPARSE_DELAY = oldDelay; } } - // unable to highlight after 100 retries - throw exception; + throw new AssertionError("Unable to highlight after " + retries + " retries", exception); } public static void ensureIndexesUpToDate(@NotNull Project project) {