From a1140ed737e2eb727a0e23c3dac988d7da810509 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Mon, 27 Jan 2020 11:53:08 +0100 Subject: [PATCH] more diagnostics for text mismatch on PsiDocumentManager.getDocument GitOrigin-RevId: 5a80899e2e781124d234689a616a8b7815441b2a --- .../com/intellij/psi/AbstractFileViewProvider.java | 2 +- .../intellij/psi/impl/PsiDocumentManagerBase.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java index 8693ccf72608..c5a543caf9b0 100644 --- a/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java @@ -385,7 +385,7 @@ public abstract class AbstractFileViewProvider extends UserDataHolderBase implem @NonNls @Override public String toString() { - return getClass().getName() + "{myVirtualFile=" + myVirtualFile + ", content=" + getContent() + '}'; + return getClass().getName() + "{vFile=" + myVirtualFile + ", content=" + getContent() + ", eventSystemEnabled=" + isEventSystemEnabled() + '}'; } public abstract PsiFile getCachedPsi(@NotNull Language target); diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index 875d49847d18..c3a93781bdb4 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -8,7 +8,9 @@ import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.*; import com.intellij.openapi.application.impl.ApplicationInfoImpl; +import com.intellij.openapi.diagnostic.Attachment; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.DocumentRunnable; import com.intellij.openapi.editor.event.DocumentEvent; @@ -169,11 +171,12 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen document = FileDocumentManager.getInstance().getDocument(viewProvider.getVirtualFile()); if (document != null) { if (document.getTextLength() != file.getTextLength()) { - String message = "Document/PSI mismatch: " + file + " (" + file.getClass() + "); physical=" + viewProvider.isPhysical(); - if (document.getTextLength() + file.getTextLength() < 8096) { - message += "\n=== document ===\n" + document.getText() + "\n=== PSI ===\n" + file.getText(); - } - throw new AssertionError(message); + String message = "Document/PSI mismatch: " + file + " of " + file.getClass() + + "; viewProvider=" + viewProvider + + "; uncommitted=" + Arrays.toString(getUncommittedDocuments()); + throw new RuntimeExceptionWithAttachments(message, + new Attachment("document.txt", document.getText()), + new Attachment("psi.txt", file.getText())); } if (!viewProvider.isPhysical()) {