From d6d7d85c5af7035e27fcbe176cc6f6f896470111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com> Date: Wed, 19 Feb 2025 07:45:56 +0800 Subject: [PATCH] pref: Vue src/router tree doc runReadAction slow and lineEnd Cache update sync --- .../plugin/show/cache/LineEndCacheUtils.java | 39 ++++++++++--------- .../plugin/show/ext/listener/FileLoader.java | 5 +-- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/github/linwancen/plugin/show/cache/LineEndCacheUtils.java b/src/main/java/io/github/linwancen/plugin/show/cache/LineEndCacheUtils.java index a9735f9..9252098 100644 --- a/src/main/java/io/github/linwancen/plugin/show/cache/LineEndCacheUtils.java +++ b/src/main/java/io/github/linwancen/plugin/show/cache/LineEndCacheUtils.java @@ -91,18 +91,18 @@ public class LineEndCacheUtils { private static void cacheUpdate() { cache.forEach((project, fileMap) -> { - try { - if (project.isDisposed()) { - cache.remove(project); - return; - } - fileMap.forEach((file, lineMap) -> lineMap.forEach((lineNumber, lineCache) -> { - @NotNull LineInfo info = lineCache.info; - @Nullable List list = lineCache.map.get(info.text); - if (!(lineCache.needUpdate() || list == null)) { + ReadAction.nonBlocking(() -> { + try { + if (project.isDisposed()) { + cache.remove(project); return; } - ReadAction.nonBlocking(() -> { + fileMap.forEach((file, lineMap) -> lineMap.forEach((lineNumber, lineCache) -> { + @NotNull LineInfo info = lineCache.info; + @Nullable List list = lineCache.map.get(info.text); + if (!(lineCache.needUpdate() || list == null)) { + return; + } try { if (project.isDisposed() || DumbService.isDumb(project)) { return; @@ -137,15 +137,16 @@ public class LineEndCacheUtils { LOG.info("LineEndCacheUtils lineMap.forEach catch Throwable but log to record.", e); } } - }).inSmartMode(project).executeSynchronously(); - })); - } catch (ProcessCanceledException ignored) { - } catch (IllegalStateException ignore) { - // ignore inSmartMode(project) throw: - // @NotNull method com/intellij/openapi/project/impl/ProjectImpl.getEarlyDisposable must not return null - } catch (Throwable e) { - LOG.info("LineEndCacheUtils cache.forEach catch Throwable but log to record.", e); - } + })); + } catch (ProcessCanceledException ignored) { + } catch (IllegalStateException ignore) { + // ignore inSmartMode(project) throw: + // @NotNull method com/intellij/openapi/project/impl/ProjectImpl.getEarlyDisposable must not + // return null + } catch (Throwable e) { + LOG.info("LineEndCacheUtils cache.forEach catch Throwable but log to record.", e); + } + }).inSmartMode(project).submit(AppExecutorUtil.getAppExecutorService()); }); } } diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/listener/FileLoader.java b/src/main/java/io/github/linwancen/plugin/show/ext/listener/FileLoader.java index a5b34a8..3ba7fda 100644 --- a/src/main/java/io/github/linwancen/plugin/show/ext/listener/FileLoader.java +++ b/src/main/java/io/github/linwancen/plugin/show/ext/listener/FileLoader.java @@ -46,9 +46,8 @@ public abstract class FileLoader { public void loadAll(@NotNull Project project) { ApplicationManager.getApplication().executeOnPooledThread(() -> - DumbService.getInstance(project).runReadActionInSmartMode(() -> - ApplicationManager.getApplication().runReadAction(() -> - loadAllImpl(project)))); + DumbService.getInstance(project).runReadActionInSmartMode(() + -> loadAllImpl(project))); } void loadFile(@NotNull VirtualFile file, @Nullable Project project) {