SIOOBE during psi/doc inconsistency diagnostics (EA-26883)

This commit is contained in:
peter
2011-04-19 20:41:54 +02:00
parent 4b70c92e97
commit 311aa3dd9d
@@ -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 + ";";
}