fix(FileInfo): Move FileViewProvider to langDoc() to fix Slow ... EDT

PsiManager.getInstance(project).findViewProvider(file)
Slow operations are prohibited on EDT in 2023.3
This commit is contained in:
林万程
2023-12-29 19:53:08 +08:00
parent 617e1d0748
commit f0e490992f
4 changed files with 26 additions and 20 deletions

View File

@@ -8,7 +8,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -16,14 +15,12 @@ public class FileInfo extends SettingsInfo {
public final @NotNull VirtualFile file;
public final @NotNull Document document;
public final @NotNull Project project;
public final @NotNull FileViewProvider viewProvider;
protected FileInfo(@NotNull VirtualFile file, @NotNull Document document, @NotNull Project project,
@NotNull FileViewProvider viewProvider, @NotNull FuncEnum funcEnum) {
@NotNull FuncEnum funcEnum) {
super(project, funcEnum);
this.project = project;
this.file = file;
this.viewProvider = viewProvider;
this.document = document;
}
@@ -32,11 +29,7 @@ public class FileInfo extends SettingsInfo {
if (document == null) {
return null;
}
@Nullable FileViewProvider viewProvider = PsiManager.getInstance(project).findViewProvider(file);
if (viewProvider == null) {
return null;
}
return new FileInfo(file, document, project, viewProvider, FuncEnum.LINE);
return new FileInfo(file, document, project, FuncEnum.LINE);
}
public static @Nullable FileInfo of(@NotNull AnActionEvent event) {
@@ -51,6 +44,6 @@ public class FileInfo extends SettingsInfo {
}
@NotNull VirtualFile file = viewProvider.getVirtualFile();
@NotNull Project project = psiFile.getProject();
return new FileInfo(file, document, project, viewProvider, FuncEnum.LINE);
return new FileInfo(file, document, project, FuncEnum.LINE);
}
}

View File

@@ -14,7 +14,7 @@ public class LineInfo extends FileInfo {
protected LineInfo(@NotNull FileInfo info, @NotNull String text,
int lineNumber, int startOffset, int endOffset) {
super(info.file, info.document, info.project, info.viewProvider, FuncEnum.LINE);
super(info.file, info.document, info.project, FuncEnum.LINE);
this.lineNumber = lineNumber;
this.startOffset = startOffset;
this.endOffset = endOffset;

View File

@@ -5,6 +5,7 @@ import com.intellij.json.psi.JsonObject;
import com.intellij.json.psi.JsonProperty;
import com.intellij.json.psi.JsonValue;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.FilenameIndex;
@@ -39,8 +40,9 @@ public class JsonLangDoc extends BaseLangDoc {
}
@Override
public @Nullable String findRefDoc(@NotNull LineInfo info, @NotNull PsiElement element) {
@Nullable PsiElement start = info.viewProvider.findElementAt(info.startOffset);
public @Nullable String findRefDoc(@NotNull LineInfo info, @NotNull FileViewProvider viewProvider,
@NotNull PsiElement element) {
@Nullable PsiElement start = viewProvider.findElementAt(info.startOffset);
if (start == null) {
return null;
}

View File

@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiReference;
import io.github.linwancen.plugin.show.bean.LineInfo;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
@@ -16,7 +17,11 @@ import io.github.linwancen.plugin.show.lang.JsonLangDoc;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
*
@@ -41,10 +46,14 @@ public abstract class BaseLangDoc extends EditorLinePainter {
}
public static @Nullable String langDoc(@NotNull LineInfo info) {
@Nullable PsiElement element = info.viewProvider.findElementAt(info.endOffset);
@Nullable FileViewProvider viewProvider = PsiManager.getInstance(info.project).findViewProvider(info.file);
if (viewProvider == null) {
return null;
}
@Nullable PsiElement element = viewProvider.findElementAt(info.endOffset);
if (element == null) {
// file end
element = info.viewProvider.findElementAt(info.endOffset - 1);
element = viewProvider.findElementAt(info.endOffset - 1);
if (element == null) {
return null;
}
@@ -52,9 +61,9 @@ public abstract class BaseLangDoc extends EditorLinePainter {
@NotNull Language language = PsiElementTo.language(element);
BaseLangDoc lineEnd = LANG_DOC_MAP.get(language.getID());
if (lineEnd != null && lineEnd.show(info)) {
return lineEnd.findRefDoc(info, element);
return lineEnd.findRefDoc(info, viewProvider, element);
} else if (language == JsonLanguage.INSTANCE && JsonLangDoc.INSTANCE.show(info)) {
return JsonLangDoc.INSTANCE.findRefDoc(info, element);
return JsonLangDoc.INSTANCE.findRefDoc(info, viewProvider, element);
}
return null;
}
@@ -63,7 +72,8 @@ public abstract class BaseLangDoc extends EditorLinePainter {
* Override like JSON
*/
@Nullable
public String findRefDoc(@NotNull LineInfo info, @NotNull PsiElement element) {
public String findRefDoc(@NotNull LineInfo info, @NotNull FileViewProvider viewProvider,
@NotNull PsiElement element) {
@Nullable Class<? extends PsiElement> refClass = getRefClass();
if (refClass == null) {
return null;
@@ -98,7 +108,8 @@ public abstract class BaseLangDoc extends EditorLinePainter {
}
@NotNull
private String mergeDoc(@NotNull String beforeText, @NotNull String text, boolean getToSet, String before, String doc) {
private String mergeDoc(@NotNull String beforeText, @NotNull String text,
boolean getToSet, String before, String doc) {
if (beforeText.startsWith("set")) {
beforeText = beforeText.substring(3);
if (text.startsWith("get")) {