From 2c0543b02fdef8caa2b0d1dd50a27d53440760f9 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 15 Apr 2011 17:54:20 +0400 Subject: [PATCH] EA-25580 --- .../impl/smartPointers/SelfElementInfo.java | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 17d4f454f1c9..9013539c18a2 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -15,11 +15,13 @@ */ package com.intellij.psi.impl.smartPointers; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Segment; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; @@ -206,42 +208,51 @@ public class SelfElementInfo implements SmartPointerElementInfo { } @Nullable - public static PsiFile restoreFileFromVirtual(VirtualFile virtualFile, @NotNull Project project) { + public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project) { if (virtualFile == null) return null; - 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); - } - if (child == null || !child.isValid()) return null; - PsiFile file = PsiManager.getInstance(project).findFile(child); - if (file == null || !file.isValid()) return null; - return file; + return ApplicationManager.getApplication().runReadAction(new Computable() { + public PsiFile 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); + } + if (child == null || !child.isValid()) return null; + PsiFile file = PsiManager.getInstance(project).findFile(child); + if (file == null || !file.isValid()) return null; + return file; + } + }); } + @Nullable - public static PsiDirectory restoreDirectoryFromVirtual(VirtualFile virtualFile, @NotNull Project project) { + public static PsiDirectory restoreDirectoryFromVirtual(final VirtualFile virtualFile, @NotNull final Project project) { if (virtualFile == null) return null; - 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); - } - if (child == null || !child.isValid()) return null; - PsiDirectory file = PsiManager.getInstance(project).findDirectory(child); - if (file == null || !file.isValid()) return null; - return file; + return ApplicationManager.getApplication().runReadAction(new Computable() { + 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); + } + if (child == null || !child.isValid()) return null; + PsiDirectory file = PsiManager.getInstance(project).findDirectory(child); + if (file == null || !file.isValid()) return null; + return file; + } + }); } protected int getSyncEndOffset() {