From 311aa3dd9da1a1048729a46c4a327fbd3d3fe67a Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 19 Apr 2011 19:46:08 +0200 Subject: [PATCH] SIOOBE during psi/doc inconsistency diagnostics (EA-26883) --- .../src/com/intellij/psi/impl/PsiDocumentManagerImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java index 3540a25aaf4c..13d024c4e208 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java @@ -518,12 +518,17 @@ public class PsiDocumentManagerImpl extends PsiDocumentManager implements Projec int startOffset = textBlock.getStartOffset(); int psiEndOffset = textBlock.getPsiEndOffset(); if (oldPsiText != null) { + String msg = "PSI/document inconsistency before reparse: "; + if (startOffset >= oldPsiText.length()) { + msg += "startOffset=" + oldPsiText + " while text length is " + oldPsiText.length() + "; "; + startOffset = oldPsiText.length(); + } + String psiPrefix = oldPsiText.substring(0, startOffset); String docPrefix = chars.subSequence(0, startOffset).toString(); String psiSuffix = oldPsiText.substring(psiEndOffset); String docSuffix = chars.subSequence(textBlock.getTextEndOffset(), chars.length()).toString(); if (!psiPrefix.equals(docPrefix) || !psiSuffix.equals(docSuffix)) { - String msg = "PSI/document inconsistency before reparse: "; if (!psiPrefix.equals(docPrefix)) { msg = msg + "psiPrefix=" + psiPrefix + "; docPrefix=" + docPrefix + ";"; }