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;
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, Boolean> 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);
}
}

View File

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