From bfa51a87c6d04a7e3d81b8e5c100c5b8043c7fb8 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 25 Feb 2017 12:30:42 +0100 Subject: [PATCH] VirtualFileWindow should be invalidated together with DocumentWindow (EA-79578 - assert: PsiDocumentManagerBase.getLastCommittedDocument) --- .../psi/impl/smartPointers/PsiAnchorTest.java | 19 +++++++++++++++---- .../editor/VirtualFileWindowImpl.java | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/PsiAnchorTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/PsiAnchorTest.java index 9a0c65cf7145..5eee26e92ad1 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/PsiAnchorTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/PsiAnchorTest.java @@ -16,10 +16,8 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.psi.PsiAnchor; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiWhiteSpace; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.tree.injected.MyTestInjector; import com.intellij.psi.xml.XmlToken; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; @@ -39,4 +37,17 @@ public class PsiAnchorTest extends LightCodeInsightFixtureTestCase { assertNull(anchor.retrieve()); } + public void testInjectedAnchor() { + new MyTestInjector(getPsiManager()).injectAll(getTestRootDisposable()); + myFixture.configureByText("a.java", "class X { String java=\"class Foo {}\"}"); + PsiClass cls = (PsiClass)myFixture.getElementAtCaret(); + assertEquals("Foo", cls.getName()); + PsiAnchor anchor = PsiAnchor.create(cls); + + myFixture.type('\n'); + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + + assertNull(anchor.retrieve()); // file is changed, so we can't restore. But this call shouldn't throw exceptions. + } + } diff --git a/platform/lang-impl/src/com/intellij/injected/editor/VirtualFileWindowImpl.java b/platform/lang-impl/src/com/intellij/injected/editor/VirtualFileWindowImpl.java index 8d34f85da24a..99d3200f3d12 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/VirtualFileWindowImpl.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/VirtualFileWindowImpl.java @@ -49,7 +49,7 @@ public class VirtualFileWindowImpl extends LightVirtualFile implements VirtualFi @Override public boolean isValid() { - return myDelegate.isValid(); + return myDelegate.isValid() && myDocumentWindow.isValid(); } @Override