From 781fa3eabd86993c5253de21c9dee807838cbbf5 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 30 Oct 2013 12:17:58 +0100 Subject: [PATCH] more diagnostics for "tree changed while calculating text" (EA-51450) --- .../impl/source/tree/CompositeElement.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java index 491849fd7fca..aed99e55e0a0 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java @@ -118,26 +118,26 @@ public class CompositeElement extends TreeElement { public void assertThreading() { if (ASSERT_THREADING) { - boolean ok = ApplicationManager.getApplication().isWriteAccessAllowed() || - //Thread.holdsLock(START_OFFSET_LOCK) || - isNonPhysicalOrInjected(); + boolean ok = ApplicationManager.getApplication().isWriteAccessAllowed() || isNonPhysicalOrInjected(); if (!ok) { - FileElement fileElement; - PsiFile psiFile; - LOG.error("Threading assertion. " + - " Under write: " + ApplicationManager.getApplication().isWriteAccessAllowed() + - "; Thread.holdsLock(PsiLock.LOCK): " + Thread.holdsLock(PsiLock.LOCK) + - "; wrapper: " + myWrapper + - "; wrapper.isPhysical(): " + (myWrapper != null && myWrapper.isPhysical()) + - "; fileElement: " +(fileElement = TreeUtil.getFileElement(this))+ - "; psiFile: " + (psiFile = fileElement == null ? null : (PsiFile)fileElement.getPsi()) + - "; psiFile.getViewProvider(): " + (psiFile == null ? null : psiFile.getViewProvider()) + - "; psiFile.isPhysical(): " + (psiFile != null && psiFile.isPhysical()) - ); + LOG.error("Threading assertion. " + getThreadingDiagnostics()); } } } + private String getThreadingDiagnostics() { + FileElement fileElement;PsiFile psiFile; + return " Under write: " + ApplicationManager.getApplication().isWriteAccessAllowed() + + "; Thread.holdsLock(PsiLock.LOCK): " + Thread.holdsLock(PsiLock.LOCK) + + "; wrapper: " + myWrapper + + "; wrapper.isPhysical(): " + (myWrapper != null && myWrapper.isPhysical()) + + "; fileElement: " + (fileElement = TreeUtil.getFileElement(this)) + + "; psiFile: " + (psiFile = fileElement == null ? null : (PsiFile)fileElement.getPsi()) + + "; psiFile.getViewProvider(): " + (psiFile == null ? null : psiFile.getViewProvider()) + + "; psiFile.isPhysical(): " + (psiFile != null && psiFile.isPhysical()) + + "; nonPhysicalOrInjected: " + isNonPhysicalOrInjected(); + } + private boolean isNonPhysicalOrInjected() { FileElement fileElement = TreeUtil.getFileElement(this); if (fileElement == null || fileElement instanceof DummyHolderElement) return true; @@ -290,8 +290,8 @@ public class CompositeElement extends TreeElement { "; current:"+myModificationsCount+ "; myHC:"+myHC+ "; assertThreading:"+ASSERT_THREADING+ - "; Thread.holdsLock(PSI_LOCK):"+Thread.holdsLock(PsiLock.LOCK)+ - "; this: " + this); + "; this: " + this + + "\n" + getThreadingDiagnostics()); } char[] buffer = new char[len];