From 0879f13edac6a5ca04c5bf89525c20b686319a5f Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 18 May 2012 18:32:01 +0400 Subject: [PATCH] use separate modificationCount for PSI and Document (fixes psifile-dependent CachedValues) [take 2] --- .../src/com/intellij/psi/impl/source/PsiFileImpl.java | 7 +++++-- .../intellij/psi/impl/source/text/BlockSupportImpl.java | 2 +- .../codeInsight/completion/CodeCompletionHandlerBase.java | 2 +- .../intellij/codeInsight/completion/OffsetTranslator.java | 4 ++-- .../codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java | 4 ++-- .../com/intellij/psi/impl/PsiToDocumentSynchronizer.java | 2 +- .../src/com/intellij/util/indexing/FileBasedIndexImpl.java | 6 +++--- .../src/com/intellij/usages/UsageInfo2UsageAdapter.java | 2 +- .../com/intellij/xml/actions/ValidateXmlActionHandler.java | 2 +- 9 files changed, 17 insertions(+), 14 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java index 2c05de57807b..5ba93fd8b982 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java @@ -73,6 +73,7 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF private IElementType myElementType; protected IElementType myContentElementType; + private long myModificationStamp; protected PsiFile myOriginalFile = null; private final FileViewProvider myViewProvider; @@ -354,7 +355,9 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF myStub = null; } - public void clearCaches() {} + public void clearCaches() { + myModificationStamp ++; + } @Override public String getText() { @@ -386,7 +389,7 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF @Override public long getModificationStamp() { - return getViewProvider().getModificationStamp(); + return myModificationStamp; } @Override diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/text/BlockSupportImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/text/BlockSupportImpl.java index 53419feb35f6..f2673843b5b6 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/text/BlockSupportImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/text/BlockSupportImpl.java @@ -180,7 +180,7 @@ public class BlockSupportImpl extends BlockSupport { viewProvider.getLanguages(); FileType fileType = viewProvider.getVirtualFile().getFileType(); final LightVirtualFile lightFile = new LightVirtualFile(fileImpl.getName(), fileType, newFileText, viewProvider.getVirtualFile().getCharset(), - fileImpl.getModificationStamp()); + fileImpl.getViewProvider().getModificationStamp()); lightFile.setOriginalFile(viewProvider.getVirtualFile()); FileViewProvider copy = viewProvider.createCopy(lightFile); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 3214d978bcca..2e1333b0919c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -785,7 +785,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { final Pair pair = reference.get(); if (pair != null && pair.first.isValid() && pair.first.getClass().equals(file.getClass())) { final PsiFile copy = pair.first; - if (copy.getModificationStamp() > file.getModificationStamp()) { + if (copy.getViewProvider().getModificationStamp() > file.getViewProvider().getModificationStamp()) { ((PsiModificationTrackerImpl) file.getManager().getModificationTracker()).incCounter(); } final Document document = pair.second; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/OffsetTranslator.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/OffsetTranslator.java index bf21e70a6399..041e2a0f25d3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/OffsetTranslator.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/OffsetTranslator.java @@ -59,10 +59,10 @@ public class OffsetTranslator implements Disposable { }); originalFile.getProject().getMessageBus().connect(this).subscribe(PsiModificationTracker.TOPIC, new PsiModificationTracker.Listener() { - long lastModCount = originalFile.getModificationStamp(); + long lastModCount = originalFile.getViewProvider().getModificationStamp(); @Override public void modificationCountChanged() { - if (isUpToDate() && lastModCount != originalFile.getModificationStamp()) { + if (isUpToDate() && lastModCount != originalFile.getViewProvider().getModificationStamp()) { myTranslation.addAll(sinceCommit); sinceCommit.clear(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index d8e2621a5a0c..7dc5955bc4d9 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -473,7 +473,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx if (myDisposed) return false; Document document = PsiDocumentManager.getInstance(myProject).getCachedDocument(file); return document != null && - document.getModificationStamp() == file.getModificationStamp() && + document.getModificationStamp() == file.getViewProvider().getModificationStamp() && myFileStatusMap.allDirtyScopesAreNull(document); } @@ -481,7 +481,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx if (myDisposed) return false; Document document = PsiDocumentManager.getInstance(myProject).getCachedDocument(file); return document != null && - document.getModificationStamp() == file.getModificationStamp() && + document.getModificationStamp() == file.getViewProvider().getModificationStamp() && myFileStatusMap.getFileDirtyScope(document, Pass.UPDATE_ALL) == null; } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java index 89b421d2249c..9cf95dcd0367 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java @@ -96,7 +96,7 @@ public class PsiToDocumentSynchronizer extends PsiTreeChangeAdapter { final boolean insideTransaction = myTransactionsMap.containsKey(document); if (!insideTransaction) { - document.setModificationStamp(psiFile.getModificationStamp()); + document.setModificationStamp(psiFile.getViewProvider().getModificationStamp()); if (LOG.isDebugEnabled()) { PsiDocumentManagerImpl.checkConsistency(psiFile, document); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index e2ae3217f0d8..b804aa97bef2 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -1384,7 +1384,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { @Override public String getText() { - if (myFile.getModificationStamp() != myDocument.getModificationStamp()) { + if (myFile.getViewProvider().getModificationStamp() != myDocument.getModificationStamp()) { final ASTNode node = myFile.getNode(); assert node != null; return node.getText(); @@ -1394,7 +1394,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { @Override public long getModificationStamp() { - return myFile.getModificationStamp(); + return myFile.getViewProvider().getModificationStamp(); } } @@ -1418,7 +1418,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { final PsiFile dominantContentFile = findDominantPsiForDocument(document, project); final DocumentContent content; - if (dominantContentFile != null && dominantContentFile.getModificationStamp() != document.getModificationStamp()) { + if (dominantContentFile != null && dominantContentFile.getViewProvider().getModificationStamp() != document.getModificationStamp()) { content = new PsiContent(document, dominantContentFile); } else { diff --git a/platform/usageView/src/com/intellij/usages/UsageInfo2UsageAdapter.java b/platform/usageView/src/com/intellij/usages/UsageInfo2UsageAdapter.java index 3a37e5b3d100..6e84ee8c0c03 100644 --- a/platform/usageView/src/com/intellij/usages/UsageInfo2UsageAdapter.java +++ b/platform/usageView/src/com/intellij/usages/UsageInfo2UsageAdapter.java @@ -407,7 +407,7 @@ public class UsageInfo2UsageAdapter implements UsageInModule, private long myModificationStamp; private long getCurrentModificationStamp() { final PsiFile containingFile = getPsiFile(); - return containingFile == null ? -1L : containingFile.getModificationStamp(); + return containingFile == null ? -1L : containingFile.getViewProvider().getModificationStamp(); } @Override diff --git a/xml/impl/src/com/intellij/xml/actions/ValidateXmlActionHandler.java b/xml/impl/src/com/intellij/xml/actions/ValidateXmlActionHandler.java index 2275976cd61a..aa7a8ae8bbd6 100644 --- a/xml/impl/src/com/intellij/xml/actions/ValidateXmlActionHandler.java +++ b/xml/impl/src/com/intellij/xml/actions/ValidateXmlActionHandler.java @@ -548,7 +548,7 @@ public class ValidateXmlActionHandler { final PsiFile psifile = PsiManager.getInstance(myProject).findFile(file); if (psifile != null && psifile.isValid()) { - timestamp += psifile.getModificationStamp(); + timestamp += psifile.getViewProvider().getModificationStamp(); } else { break; }