From f0e490992f57a484cfb34cf79dc1370882b054b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com> Date: Fri, 29 Dec 2023 19:53:08 +0800 Subject: [PATCH] fix(FileInfo): Move FileViewProvider to langDoc() to fix Slow ... EDT PsiManager.getInstance(project).findViewProvider(file) Slow operations are prohibited on EDT in 2023.3 --- .../linwancen/plugin/show/bean/FileInfo.java | 13 +++------- .../linwancen/plugin/show/bean/LineInfo.java | 2 +- .../plugin/show/lang/JsonLangDoc.java | 6 +++-- .../plugin/show/lang/base/BaseLangDoc.java | 25 +++++++++++++------ 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java b/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java index 48a8662..0df8a49 100644 --- a/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java +++ b/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java @@ -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); } } diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java b/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java index 3090f79..8025b73 100644 --- a/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java +++ b/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java @@ -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; diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java index d6ac2a6..503e783 100644 --- a/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java +++ b/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java @@ -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; } diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java index 4474447..ffca956 100644 --- a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java +++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java @@ -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 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")) {