From fe1786aefaa938d88db934ba4a0a8d87e170d85a Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 28 Oct 2015 10:58:37 +0100 Subject: [PATCH] report each "PSI invalidated outside transaction" trace only once --- .../core-impl/src/com/intellij/psi/impl/DebugUtil.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java b/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java index 8da741056589..1886771a23ef 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java @@ -34,12 +34,14 @@ import com.intellij.psi.stubs.ObjectStubSerializer; import com.intellij.psi.stubs.Stub; import com.intellij.psi.tree.IElementType; import com.intellij.util.*; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.diff.FlyweightCapableTreeStructure; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.List; +import java.util.Set; @SuppressWarnings({"HardCodedStringLiteral", "UtilityClassWithoutPrivateConstructor", "UnusedDeclaration", "TestOnlyProblems"}) public class DebugUtil { @@ -512,6 +514,7 @@ public class DebugUtil { private static final ThreadLocal ourPsiModificationTrace = new ThreadLocal(); private static final ThreadLocal ourPsiModificationDepth = new ThreadLocal(); + private static final Set ourNonTransactedTraces = ContainerUtil.newConcurrentSet(); /** * Marks a start of PSI modification action. Any PSI/AST elements invalidated inside such an action will contain a debug trace @@ -593,7 +596,9 @@ public class DebugUtil { Object trace = ourPsiModificationTrace.get(); if (trace == null) { trace = new Throwable(); - LOG.info("PSI invalidated outside transaction", (Throwable)trace); + if (ourNonTransactedTraces.add(ExceptionUtil.getThrowableText((Throwable)trace))) { + LOG.info("PSI invalidated outside transaction", (Throwable)trace); + } } return trace; }