From f22784d90d8db3a44ec80e67b3dcb66ff5a5a438 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 10 Dec 2014 20:34:31 +0100 Subject: [PATCH] earlier stub-psi mismatch diagnostics revival --- .../intellij/psi/stubs/StubTreeLoaderImpl.java | 16 +++++++++------- .../intellij/psi/stubs/StubUpdatingIndex.java | 10 ++++++++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java index e3e4616ee5de..57799a57d4b4 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.impl.PsiManagerEx; @@ -94,12 +95,13 @@ public class StubTreeLoaderImpl extends StubTreeLoader { SerializedStubTree stubTree = datas.get(0); if (!stubTree.contentLengthMatches(vFile.getLength(), getCurrentTextContentLength(project, vFile, document))) { - //todo find another way of early stub-ast mismatch prevention - //return processError(vFile, - // "Outdated stub in index: " + StubUpdatingIndex.getIndexingStampInfo(vFile) + - // ", docSaved=" + saved + - // ", queried at " + vFile.getTimeStamp(), - // null); + return processError(vFile, + "Outdated stub in index: " + StubUpdatingIndex.getIndexingStampInfo(vFile) + + ", doc=" + document + + ", docSaved=" + saved + + ", wasIndexedAlready=" + wasIndexedAlready + + ", queried at " + vFile.getTimeStamp(), + null); } Stub stub; @@ -131,7 +133,7 @@ public class StubTreeLoaderImpl extends StubTreeLoader { } if (document != null) { - return document.getTextLength(); + return PsiDocumentManager.getInstance(project).getLastCommittedText(document).length(); } return -1; } diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java index 329820b8297a..85d51fce9cc4 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java @@ -46,7 +46,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi private static final Logger LOG = Logger.getInstance("#com.intellij.psi.stubs.StubUpdatingIndex"); // todo remove once we don't need this for stub-ast mismatch debug info - private static final FileAttribute INDEXED_STAMP = new FileAttribute("stubIndexStamp", 1, false); + private static final FileAttribute INDEXED_STAMP = new FileAttribute("stubIndexStamp", 2, false); public static final ID INDEX_ID = ID.create("Stubs"); @@ -127,7 +127,13 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi if (rootStub == null) return; VirtualFile file = inputData.getFile(); - int contentLength = file.getFileType().isBinary() ? -1 : inputData.getContentAsText().length(); + int contentLength; + if (file.getFileType().isBinary()) { + contentLength = -1; + } + else { + contentLength = ((FileContentImpl)inputData).getPsiFileForPsiDependentIndex().getTextLength(); + } rememberIndexingStamp(file, contentLength); final BufferExposingByteArrayOutputStream bytes = new BufferExposingByteArrayOutputStream();