void () { Document document = getCachedDocument(); if (document instanceof DocumentWindow) { return; } if (document != null && ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myManager.getProject())).getSynchronizer().isInSynchronization(document)) { return; } List<FileASTNode> knownTreeRoots = getKnownTreeRoots(); if (knownTreeRoots.isEmpty()) return; int fileLength = myContent.getTextLength(); for (FileASTNode fileElement : knownTreeRoots) { int nodeLength = fileElement.getTextLength(); if (!isDocumentConsistentWithPsi(fileLength, fileElement, nodeLength)) { PsiUtilCore.ensureValid(fileElement.getPsi()); Attachment vfContent = new Attachment(myVirtualFile.getName(), myContent.getText().toString()); Attachment astContent = new Attachment(myVirtualFile.getNameWithoutExtension() + ".tree.txt", fileElement.getText()); Attachment[] attachments = document == null ? new Attachment[]{vfContent, astContent} : new Attachment[]{vfContent, astContent, new Attachment(myVirtualFile.getNameWithoutExtension() + ".document.txt", document.getText())}; // exceptions here should be assigned to peter LOG.error("Inconsistent " + fileElement.getElementType() + " tree in " + this + "; nodeLength=" + nodeLength + "; fileLength=" + fileLength, attachments); } } }