diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/conf/listener/ConfFileInitListener.java b/src/main/java/io/github/linwancen/plugin/show/ext/conf/listener/ConfFileInitListener.java index 60c7905..e262eb1 100644 --- a/src/main/java/io/github/linwancen/plugin/show/ext/conf/listener/ConfFileInitListener.java +++ b/src/main/java/io/github/linwancen/plugin/show/ext/conf/listener/ConfFileInitListener.java @@ -1,34 +1,42 @@ package io.github.linwancen.plugin.show.ext.conf.listener; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ProjectManagerListener; import io.github.linwancen.plugin.show.ext.conf.ConfCache; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * call ConfCache.loadAll */ -public class ConfFileInitListener implements ProjectManagerListener { +public class ConfFileInitListener implements DumbService.DumbModeListener, ProjectManagerListener { private static final Logger LOG = LoggerFactory.getLogger(ConfFileInitListener.class); + private static final Map PROJECT_LOAD_MAP = new ConcurrentHashMap<>() {}; @Override - public void projectOpened(@NotNull Project project) { + public void exitDumbMode() { try { - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - boolean isInLoadAll = Arrays.stream(stackTrace).anyMatch(stack -> - stack.getMethodName().equals("loadAll") - && stack.getClassName().equals(ConfCache.class.getName())); - if (isInLoadAll) { - return; + @NotNull Project[] projects = ProjectManager.getInstance().getOpenProjects(); + for (Project project : projects) { + PROJECT_LOAD_MAP.computeIfAbsent(project, k -> { + ConfCache.loadAll(project); + return true; + }); } - ConfCache.loadAll(project); } catch (Throwable e) { LOG.info("ConfFileInitListener catch Throwable but log to record.", e); } } + + @Override + public void projectClosed(@NotNull Project project) { + PROJECT_LOAD_MAP.remove(project); + } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 789cd09..092063f 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -153,6 +153,8 @@ Show doc comment in the Project view Tree, line End, json, other +