VirtualFileWindow should be invalidated together with DocumentWindow (EA-79578 - assert: PsiDocumentManagerBase.getLastCommittedDocument)

This commit is contained in:
peter
2017-02-25 12:30:42 +01:00
parent edea564f47
commit bfa51a87c6
2 changed files with 16 additions and 5 deletions
@@ -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 <caret>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.
}
}
@@ -49,7 +49,7 @@ public class VirtualFileWindowImpl extends LightVirtualFile implements VirtualFi
@Override
public boolean isValid() {
return myDelegate.isValid();
return myDelegate.isValid() && myDocumentWindow.isValid();
}
@Override