summaryrefslogtreecommitdiff
path: root/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java')
-rw-r--r--platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java
index ce3bc9559769..7b4e9ec210ac 100644
--- a/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java
+++ b/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java
@@ -26,12 +26,15 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.ContentBasedFileSubstitutor;
import com.intellij.openapi.fileTypes.FileType;
+import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.LowMemoryWatcher;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileVisitor;
@@ -55,6 +58,7 @@ import java.util.concurrent.ConcurrentMap;
public class FileManagerImpl implements FileManager {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.file.impl.FileManagerImpl");
+ private final Key<FileViewProvider> myPsiHardRefKey = Key.create("HARD_REFERENCE_TO_PSI"); //non-static!
private final PsiManagerImpl myManager;
private final FileIndexFacade myFileIndex;
@@ -166,7 +170,7 @@ public class FileManagerImpl implements FileManager {
@NotNull
public FileViewProvider findViewProvider(@NotNull final VirtualFile file) {
assert !file.isDirectory();
- FileViewProvider viewProvider = getFromInjected(file);
+ FileViewProvider viewProvider = findCachedViewProvider(file);
if (viewProvider != null) return viewProvider;
viewProvider = myVFileToViewProviderMap.get(file);
if(viewProvider == null) {
@@ -178,8 +182,9 @@ public class FileManagerImpl implements FileManager {
@Override
public FileViewProvider findCachedViewProvider(@NotNull final VirtualFile file) {
FileViewProvider viewProvider = getFromInjected(file);
- if (viewProvider != null) return viewProvider;
- return myVFileToViewProviderMap.get(file);
+ if (viewProvider == null) viewProvider = myVFileToViewProviderMap.get(file);
+ if (viewProvider == null) viewProvider = file.getUserData(myPsiHardRefKey);
+ return viewProvider;
}
@Nullable
@@ -214,9 +219,14 @@ public class FileManagerImpl implements FileManager {
if (document != null) {
PsiDocumentManagerBase.cachePsi(document, null);
}
+ virtualFile.putUserData(myPsiHardRefKey, null);
}
else {
- myVFileToViewProviderMap.put(virtualFile, fileViewProvider);
+ if (virtualFile instanceof LightVirtualFile) {
+ virtualFile.putUserData(myPsiHardRefKey, fileViewProvider);
+ } else {
+ myVFileToViewProviderMap.put(virtualFile, fileViewProvider);
+ }
}
}
}
@@ -398,7 +408,12 @@ public class FileManagerImpl implements FileManager {
PsiDirectory psiDir = myVFileToPsiDirMap.get(vFile);
if (psiDir != null) return psiDir;
- if (myFileIndex.isExcludedFile(vFile)) return null;
+ if (Registry.is("ide.hide.excluded.files")) {
+ if (myFileIndex.isExcludedFile(vFile)) return null;
+ }
+ else {
+ if (FileTypeRegistry.getInstance().isFileIgnored(vFile)) return null;
+ }
VirtualFile parent = vFile.getParent();
if (parent != null) { //?
@@ -430,7 +445,8 @@ public class FileManagerImpl implements FileManager {
@Nullable
PsiFile getCachedPsiFileInner(@NotNull VirtualFile file) {
- final FileViewProvider fileViewProvider = myVFileToViewProviderMap.get(file);
+ FileViewProvider fileViewProvider = myVFileToViewProviderMap.get(file);
+ if (fileViewProvider == null) fileViewProvider = file.getUserData(myPsiHardRefKey);
return fileViewProvider instanceof SingleRootFileViewProvider
? ((SingleRootFileViewProvider)fileViewProvider).getCachedPsi(fileViewProvider.getBaseLanguage()) : null;
}