diff --git a/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index 6a43ad6d5989..89a00b045a08 100644 --- a/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -257,6 +257,11 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi return fileSizeIsGreaterThan(vFile, PersistentFS.MAX_INTELLISENSE_FILESIZE); } + public static boolean isTooLarge(final VirtualFile vFile, final long contentSize) { + if (Boolean.TRUE.equals(vFile.getUserData(ourNoSizeLimitKey))) return false; + return contentSize > PersistentFS.MAX_INTELLISENSE_FILESIZE; + } + private static boolean fileSizeIsGreaterThan(final VirtualFile vFile, final long maxInBytes) { if (vFile instanceof LightVirtualFile) { // This is optimization in order to avoid conversion of [large] file contents to bytes diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java index 2d5b574b611d..92ee5d5c2917 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java @@ -1163,7 +1163,12 @@ public class FileBasedIndex implements ApplicationComponent { ProgressManager.getInstance().executeNonCancelableSection(new Runnable() { public void run() { try { - final FileContent newFc = new FileContent(vFile, content.getText(), vFile.getCharset()); + final String contentText = content.getText(); + if (isTooLarge(vFile, contentText.length())) { + return; + } + + final FileContent newFc = new FileContent(vFile, contentText, vFile.getCharset()); if (dominantContentFile != null) { dominantContentFile.putUserData(PsiFileImpl.BUILDING_STUB, true); @@ -1820,6 +1825,14 @@ public class FileBasedIndex implements ApplicationComponent { return false; } + private boolean isTooLarge(VirtualFile file, long contentSize) { + if (SingleRootFileViewProvider.isTooLarge(file, contentSize)) { + final FileType type = FileTypeManager.getInstance().getFileTypeByFile(file); + return !myNoLimitCheckTypes.contains(type); + } + return false; + } + public CollectingContentIterator createContentIterator() { return new UnindexedFilesFinder(); }