mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-148586 com.intellij.openapi.vfs.InvalidVirtualFileAccessException when moving files outside of IDE
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user