String (@NotNull PsiElement element, @NotNull Document document) { PsiUtilCore.ensureValid(element); PsiFile file = element.getContainingFile(); if (file == null) return "no file for " + element + " of " + element.getClass(); PsiUtilCore.ensureValid(file); FileViewProvider viewProvider = file.getViewProvider(); PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject()); Document actualDocument = viewProvider.getDocument(); String fileDiagnostics = "File[" + file + " " + file.getName() + ", " + file.getLanguage() + ", " + viewProvider + "]"; if (actualDocument != document) { return "wrong document for " + fileDiagnostics + "; expected " + document + "; actual " + actualDocument; } PsiFile cachedPsiFile = manager.getCachedPsiFile(document); FileViewProvider actualViewProvider = cachedPsiFile == null ? null : cachedPsiFile.getViewProvider(); if (actualViewProvider != viewProvider) { return "wrong view provider for " + document + ", expected " + viewProvider + "; actual " + actualViewProvider; } if (!manager.isCommitted(document)) return "not committed document " + document + ", " + fileDiagnostics; int fileLength = file.getTextLength(); int docLength = document.getTextLength(); if (fileLength != docLength) { return "file/doc text length different, " + fileDiagnostics + " file.length=" + fileLength + "; doc.length=" + docLength; } return "unknown inconsistency in " + fileDiagnostics; }