feat(extDoc): Load xxx.tree/key/doc/json.tsv when projectOpened -> exitDumbMode

This commit is contained in:
林万程
2024-09-21 10:05:26 +08:00
parent 754536ae6b
commit 3b9309eb80
2 changed files with 20 additions and 10 deletions

View File

@@ -1,34 +1,42 @@
package io.github.linwancen.plugin.show.ext.conf.listener; 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.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ProjectManagerListener; import com.intellij.openapi.project.ProjectManagerListener;
import io.github.linwancen.plugin.show.ext.conf.ConfCache; import io.github.linwancen.plugin.show.ext.conf.ConfCache;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Arrays; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* call ConfCache.loadAll * 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 Logger LOG = LoggerFactory.getLogger(ConfFileInitListener.class);
private static final Map<Project, Boolean> PROJECT_LOAD_MAP = new ConcurrentHashMap<>() {};
@Override @Override
public void projectOpened(@NotNull Project project) { public void exitDumbMode() {
try { try {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); @NotNull Project[] projects = ProjectManager.getInstance().getOpenProjects();
boolean isInLoadAll = Arrays.stream(stackTrace).anyMatch(stack -> for (Project project : projects) {
stack.getMethodName().equals("loadAll") PROJECT_LOAD_MAP.computeIfAbsent(project, k -> {
&& stack.getClassName().equals(ConfCache.class.getName())); ConfCache.loadAll(project);
if (isInLoadAll) { return true;
return; });
} }
ConfCache.loadAll(project);
} catch (Throwable e) { } catch (Throwable e) {
LOG.info("ConfFileInitListener catch Throwable but log to record.", e); LOG.info("ConfFileInitListener catch Throwable but log to record.", e);
} }
} }
@Override
public void projectClosed(@NotNull Project project) {
PROJECT_LOAD_MAP.remove(project);
}
} }

View File

@@ -153,6 +153,8 @@ Show doc comment in the Project view Tree, line End, json, other
<projectListeners> <projectListeners>
<listener class="io.github.linwancen.plugin.show.ext.conf.listener.ConfFileInitListener" <listener class="io.github.linwancen.plugin.show.ext.conf.listener.ConfFileInitListener"
topic="com.intellij.openapi.project.ProjectManagerListener"/> topic="com.intellij.openapi.project.ProjectManagerListener"/>
<listener class="io.github.linwancen.plugin.show.ext.conf.listener.ConfFileInitListener"
topic="com.intellij.openapi.project.DumbService$DumbModeListener"/>
<listener class="io.github.linwancen.plugin.show.cache.CacheUpdateProjectListener" <listener class="io.github.linwancen.plugin.show.cache.CacheUpdateProjectListener"
topic="com.intellij.openapi.project.ProjectManagerListener"/> topic="com.intellij.openapi.project.ProjectManagerListener"/>
</projectListeners> </projectListeners>