track in which multiple-tree file PsiAnchor was created (EA-33146)
authorpeter <peter@jetbrains.com>
Tue, 24 Jan 2012 12:32:31 +0000 (13:32 +0100)
committerpeter <peter@jetbrains.com>
Tue, 24 Jan 2012 12:33:40 +0000 (13:33 +0100)
platform/lang-impl/src/com/intellij/psi/PsiAnchor.java
platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java

index c3a4289e08e931c75a67188a04ed4fdd61f6abb0..042dbf6bd1fc87f3dc4928803d195244f6112e47 100644 (file)
@@ -141,6 +141,7 @@ public abstract class PsiAnchor {
     private final VirtualFile myVirtualFile;
     private final Project myProject;
     private final Language myLanguage;
+    private final Language myFileLanguage;
     private final int myStartOffset;
     private final int myEndOffset;
     private final Class myClass;
@@ -157,6 +158,7 @@ public abstract class PsiAnchor {
       myEndOffset = endOffset;
       myClass = aClass;
       myLanguage = language;
+      myFileLanguage = file.getLanguage();
     }
 
     @Override
@@ -178,8 +180,9 @@ public abstract class PsiAnchor {
     }
 
     @Override
+    @Nullable
     public PsiFile getFile() {
-      return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject);
+      return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject, myLanguage);
     }
 
     @Override
index 2c7e5ac35389150b221fdf5c992a8147ad4560e4..2f25cbf6732d24a778ffd2d538f6fc6fa5911e02 100644 (file)
@@ -213,9 +213,13 @@ public class SelfElementInfo implements SmartPointerElementInfo {
 
   @Nullable
   public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project) {
+    return restoreFileFromVirtual(virtualFile, project, null);
+  }
+  @Nullable
+  public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project, @Nullable final Language language) {
     if (virtualFile == null) return null;
 
-    return ApplicationManager.getApplication().runReadAction(new Computable<PsiFile>() {
+    return ApplicationManager.getApplication().runReadAction(new NullableComputable<PsiFile>() {
       @Override
       public PsiFile compute() {
         VirtualFile child;
@@ -230,7 +234,10 @@ public class SelfElementInfo implements SmartPointerElementInfo {
         }
         if (child == null || !child.isValid()) return null;
         PsiFile file = PsiManager.getInstance(project).findFile(child);
-        if (file == null || !file.isValid()) return null;
+        if (file != null && language != null) {
+          return file.getViewProvider().getPsi(language);
+        }
+        
         return file;
       }
     });