IDEA-148586 com.intellij.openapi.vfs.InvalidVirtualFileAccessException when moving files outside of IDE

This commit is contained in:
peter
2015-12-03 15:20:01 +01:00
parent 59dbfdbdde
commit e0f3c84591
@@ -176,16 +176,7 @@ public class SelfElementInfo extends SmartPointerElementInfo {
@Override
public PsiFile compute() {
if (project.isDisposed()) return null;
VirtualFile child;
if (virtualFile.isValid()) {
child = virtualFile;
}
else {
VirtualFile vParent = virtualFile.getParent();
if (vParent == null || !vParent.isValid()) return null;
String name = virtualFile.getName();
child = vParent.findChild(name);
}
VirtualFile child = restoreVFile(virtualFile);
if (child == null || !child.isValid()) return null;
PsiFile file = PsiManager.getInstance(project).findFile(child);
if (file != null && language != null) {
@@ -204,16 +195,7 @@ public class SelfElementInfo extends SmartPointerElementInfo {
return ApplicationManager.getApplication().runReadAction(new Computable<PsiDirectory>() {
@Override
public PsiDirectory compute() {
VirtualFile child;
if (virtualFile.isValid()) {
child = virtualFile;
}
else {
VirtualFile vParent = virtualFile.getParent();
if (vParent == null || !vParent.isDirectory()) return null;
String name = virtualFile.getName();
child = vParent.findChild(name);
}
VirtualFile child = restoreVFile(virtualFile);
if (child == null || !child.isValid()) return null;
PsiDirectory file = PsiManager.getInstance(project).findDirectory(child);
if (file == null || !file.isValid()) return null;
@@ -222,6 +204,21 @@ public class SelfElementInfo extends SmartPointerElementInfo {
});
}
@Nullable
private static VirtualFile restoreVFile(VirtualFile virtualFile) {
VirtualFile child;
if (virtualFile.isValid()) {
child = virtualFile;
}
else {
VirtualFile vParent = virtualFile.getParent();
if (vParent == null || !vParent.isValid()) return null;
String name = virtualFile.getName();
child = vParent.findChild(name);
}
return child;
}
@Override
public int elementHashCode() {
return getVirtualFile().hashCode();