From ce286c7d14f1693021c69c01eee9d2d70df2022d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com> Date: Sat, 9 Apr 2022 22:39:46 +0800 Subject: [PATCH] =?UTF-8?q?conf=20ext=20cache=20|=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=8B=93=E5=B1=95=E5=90=8D=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/show/ext/conf/ConfCache.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java index 53c9a7b..43ffa51 100644 --- a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java +++ b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java @@ -13,11 +13,9 @@ import com.intellij.psi.search.FilenameIndex; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListSet; import java.util.regex.Pattern; /** @@ -32,6 +30,7 @@ public class ConfCache { static final String DOC_MID_EXT = ".doc"; static final String TREE_MID_EXT = ".tree"; + private static final ConcurrentSkipListSet EXT_IN_KEY_CACHE = new ConcurrentSkipListSet<>(); private static final Map>> KEY_CACHE = new ConcurrentHashMap<>(); private static final Map>> DOC_CACHE = new ConcurrentHashMap<>(); private static final Map>> TREE_CACHE = new ConcurrentHashMap<>(); @@ -46,6 +45,12 @@ public class ConfCache { @NotNull public static Map>> keyMap(@Nullable Project project, @NotNull VirtualFile file) { + String ext = file.getExtension(); + // file witch not ext can have itself ext doc + if (ext != null && !EXT_IN_KEY_CACHE.contains(ext)) { + // faster than find in KEY_CACHE + return Collections.emptyMap(); + } return ConfCacheGetUtils.get(file, KEY_MID_EXT, KEY_CACHE); } @@ -60,6 +65,7 @@ public class ConfCache { } static void clearAll() { + EXT_IN_KEY_CACHE.clear(); KEY_CACHE.clear(); DOC_CACHE.clear(); TREE_CACHE.clear(); @@ -137,6 +143,11 @@ public class ConfCache { // this pattern would skip empty line String[] lines = LINE_PATTERN.split(text); if (name.endsWith(KEY_MID_EXT)) { + String matchName = name.substring(0, name.length() - KEY_MID_EXT.length()); + int i = matchName.lastIndexOf("."); + if (i > 0) { + EXT_IN_KEY_CACHE.add(matchName.substring(i + 1)); + } KEY_CACHE.put(file, ConfFactory.buildMap(project, file.getPath(), lines, true)); } else if (name.endsWith(DOC_MID_EXT)) { DOC_CACHE.put(file, ConfFactory.buildMap(project, file.getPath(), lines, false));