feat(extDoc): Load xxx.tree/key/doc/json.tsv when projectOpened -> exitDumbMode
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user