mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
let file's cached values expire on its rename
This commit is contained in:
@@ -32,7 +32,6 @@ import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -340,4 +339,23 @@ public class PsiModificationTrackerTest extends JavaCodeInsightFixtureTestCase {
|
||||
assertNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", GlobalSearchScope.allScope(getProject())));
|
||||
assertFalse(count1 == tracker.getJavaStructureModificationCount());
|
||||
}
|
||||
|
||||
public void testVirtualFileRename_WithPsi() throws IOException {
|
||||
PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker();
|
||||
final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject());
|
||||
GlobalSearchScope scope = GlobalSearchScope.allScope(getProject());
|
||||
|
||||
final VirtualFile file = myFixture.addFileToProject("foo/Foo.java", "package foo; class Foo {}").getVirtualFile();
|
||||
assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", scope));
|
||||
long count1 = tracker.getModificationCount();
|
||||
long hc = psiManager.findFile(file).hashCode();
|
||||
long stamp1 = psiManager.findFile(file).getModificationStamp();
|
||||
|
||||
file.rename(this, "Bar.java");
|
||||
|
||||
assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", scope));
|
||||
assertTrue(count1 != tracker.getModificationCount());
|
||||
assertTrue(stamp1 != psiManager.findFile(file).getModificationStamp());
|
||||
assertEquals(hc, psiManager.findFile(file).hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiManagerImpl;
|
||||
import com.intellij.psi.impl.PsiTreeChangeEventImpl;
|
||||
import com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl;
|
||||
import com.intellij.psi.impl.source.PsiFileImpl;
|
||||
import com.intellij.util.FileContentUtilCore;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -399,6 +400,9 @@ public class PsiVFSListener extends VirtualFileAdapter {
|
||||
myManager.childReplaced(treeEvent);
|
||||
}
|
||||
else {
|
||||
if (oldPsiFile instanceof PsiFileImpl) {
|
||||
((PsiFileImpl)oldPsiFile).clearCaches();
|
||||
}
|
||||
treeEvent.setElement(oldPsiFile);
|
||||
treeEvent.setPropertyName(PsiTreeChangeEvent.PROP_FILE_NAME);
|
||||
treeEvent.setOldValue(event.getOldValue());
|
||||
|
||||
Reference in New Issue
Block a user