diff --git a/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java b/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java index 7c078165d31b..dea9282d67e3 100644 --- a/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -317,4 +318,24 @@ public class MiscPsiTest extends LightCodeInsightFixtureTestCase { assertTrue(file.getText(), file.getText().contains("foo() {\n")); } + + public void testPsiModificationNotAffectingDocument() { + final PsiJavaFile file = (PsiJavaFile)myFixture.addFileToProject("a.java", "class A{public static void foo() { }}"); + + PsiClass aClass = file.getClasses()[0]; + //noinspection ResultOfMethodCallIgnored + aClass.getNode(); + PlatformTestUtil.tryGcSoftlyReachableObjects(); + + PsiKeyword kw = assertInstanceOf(aClass.getMethods()[0].getModifierList().getFirstChild(), PsiKeyword.class); + kw.delete(); + + Document document = PsiDocumentManager.getInstance(getProject()).getDocument(file); + assertNotNull(document); + assertTrue(document.getModificationStamp() != file.getVirtualFile().getModificationStamp()); + assertEquals(document.getModificationStamp(), file.getViewProvider().getModificationStamp()); + FileDocumentManager.getInstance().saveDocument(document); + + assertEquals(file.getText(), LoadTextUtil.loadText(file.getVirtualFile()).toString()); + } } diff --git a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index 6899460bf235..3c038da34bca 100644 --- a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -548,7 +548,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi @Override public long getModificationStamp() { - Document document = com.intellij.reference.SoftReference.dereference(myDocument); + Document document = getCachedDocument(); if (document != null) return getLastCommittedStamp(document); return myVirtualFile.getModificationStamp(); }