mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix FileContent.getPsiFile to return proper psi when max.file.size is reached
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user