From a93145cbb2725b814e6c7f3b4ee98b0e224deaaf Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 1 Sep 2010 20:37:42 +0400 Subject: [PATCH] fix FileContent.getPsiFile to return proper psi when max.file.size is reached --- .../src/com/intellij/psi/PsiFileFactory.java | 3 +++ .../intellij/psi/SingleRootFileViewProvider.java | 3 +++ .../com/intellij/psi/impl/PsiFileFactoryImpl.java | 14 +++++++++++++- .../com/intellij/util/indexing/FileContent.java | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/PsiFileFactory.java b/platform/lang-api/src/com/intellij/psi/PsiFileFactory.java index c43cf11de693..67ae990016d1 100644 --- a/platform/lang-api/src/com/intellij/psi/PsiFileFactory.java +++ b/platform/lang-api/src/com/intellij/psi/PsiFileFactory.java @@ -61,6 +61,9 @@ public abstract class PsiFileFactory { public abstract PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text, boolean physical, boolean markAsCopy); + public abstract PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text, + boolean physical, boolean markAsCopy, boolean noSizeLimit); + public abstract PsiFile createFileFromText(FileType fileType, String fileName, CharSequence chars, int startOffset, int endOffset); @Nullable diff --git a/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index 034a6898c8c5..6e590d148286 100644 --- a/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -27,6 +27,7 @@ import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.fileTypes.*; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.ex.dummy.DummyFileSystem; @@ -52,6 +53,7 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicReference; public class SingleRootFileViewProvider extends UserDataHolderBase implements FileViewProvider { + public static final Key ourNoSizeLimitKey = Key.create("no.size.limit"); private static final Logger LOG = Logger.getInstance("#" + SingleRootFileViewProvider.class.getCanonicalName()); private final PsiManager myManager; private final VirtualFile myVirtualFile; @@ -251,6 +253,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi } public static boolean isTooLarge(final VirtualFile vFile) { + if (vFile.getUserData(ourNoSizeLimitKey) != null) return false; return fileSizeIsGreaterThan(vFile, PersistentFS.MAX_INTELLISENSE_FILESIZE); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiFileFactoryImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiFileFactoryImpl.java index 256bff8ad3ce..c971056e5eeb 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiFileFactoryImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiFileFactoryImpl.java @@ -56,7 +56,19 @@ public class PsiFileFactoryImpl extends PsiFileFactory { public PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text, boolean physical, final boolean markAsCopy) { - return trySetupPsiForFile(new LightVirtualFile(name, language, text), language, physical, markAsCopy); + return createFileFromText(name, language, text, physical, markAsCopy, false); + } + + @Override + public PsiFile createFileFromText(@NotNull String name, + @NotNull Language language, + @NotNull CharSequence text, + boolean physical, + boolean markAsCopy, + boolean noSizeLimit) { + LightVirtualFile virtualFile = new LightVirtualFile(name, language, text); + if (noSizeLimit) virtualFile.putUserData(SingleRootFileViewProvider.ourNoSizeLimitKey, Boolean.TRUE); + return trySetupPsiForFile(virtualFile, language, physical, markAsCopy); } @NotNull diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java b/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java index 7e5e8c24ad88..545d79dc89c2 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java @@ -69,7 +69,7 @@ public final class FileContent extends UserDataHolderBase { } final Language language = ((LanguageFileType)getFileTypeWithoutSubstitution()).getLanguage(); final Language substitutedLanguage = LanguageSubstitutors.INSTANCE.substituteLanguage(language, getFile(), project); - psi = PsiFileFactory.getInstance(project).createFileFromText(getFileName(), substitutedLanguage, getContentAsText(), false, false); + psi = PsiFileFactory.getInstance(project).createFileFromText(getFileName(), substitutedLanguage, getContentAsText(), false, false, true); psi.putUserData(FileBasedIndex.VIRTUAL_FILE, getFile()); putUserData(CACHED_PSI, psi);