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