fix FileContent.getPsiFile to return proper psi when max.file.size is reached

This commit is contained in:
Maxim.Mossienko
2010-09-01 20:37:42 +04:00
parent 19320b6630
commit a93145cbb2
4 changed files with 20 additions and 2 deletions
@@ -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
@@ -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<Boolean> 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);
}
@@ -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
@@ -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);