From d77cee81ed487ca993eee24241547c570a02660a Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 16 Sep 2016 21:05:03 +0200 Subject: [PATCH] report only one transaction error per EDT event (fixes freeze from IDEA-161366) --- .../intellij/openapi/application/TransactionGuardImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java index 00daf6cdf38a..8bd8c5d2090d 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java @@ -50,6 +50,7 @@ public class TransactionGuardImpl extends TransactionGuard { private final Map myWriteSafeModalities = ContainerUtil.createConcurrentWeakMap(); private TransactionIdImpl myCurrentTransaction; private boolean myWritingAllowed; + private boolean myErrorReported; private static boolean ourTestingTransactions; public TransactionGuardImpl() { @@ -212,6 +213,7 @@ public class TransactionGuardImpl extends TransactionGuard { */ @NotNull public AccessToken startActivity(boolean userActivity) { + myErrorReported = false; boolean allowWriting = userActivity && isWriteSafeModality(ModalityState.current()); if (myWritingAllowed == allowWriting) { return AccessToken.EMPTY_ACCESS_TOKEN; @@ -234,7 +236,7 @@ public class TransactionGuardImpl extends TransactionGuard { public void assertWriteActionAllowed() { ApplicationManager.getApplication().assertIsDispatchThread(); - if (areAssertionsEnabled() && !myWritingAllowed) { + if (areAssertionsEnabled() && !myWritingAllowed && !myErrorReported) { String message = "Write access is allowed from write-safe contexts only. " + "Please ensure you're using invokeLater/invokeAndWait with a correct modality state (not \"any\"). " + "See TransactionGuard documentation for details." + @@ -242,6 +244,7 @@ public class TransactionGuardImpl extends TransactionGuard { "\n known modalities=" + myWriteSafeModalities; // please assign exceptions here to Peter LOG.error(message); + myErrorReported = true; } }