From 9676c814558ff21cd927f7c9ca2d64dfd2d4630b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=B6=E8=AE=AD?= Date: Tue, 4 Aug 2026 17:45:27 +0800 Subject: [PATCH] fix: enable newly added plugins with existing config --- .../system/plugin/PluginManager.java | 28 +++++++++++-------- src/main/resources/templates/plugins.config | 2 +- .../DefaultPluginConfigurationTest.java | 16 +++++------ 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/example/workutils/system/plugin/PluginManager.java b/src/main/java/com/example/workutils/system/plugin/PluginManager.java index 8ed5f0d..d87cbd9 100644 --- a/src/main/java/com/example/workutils/system/plugin/PluginManager.java +++ b/src/main/java/com/example/workutils/system/plugin/PluginManager.java @@ -256,25 +256,31 @@ public class PluginManager { String orderStr = props.getProperty("plugins.order"); String disabledStr = props.getProperty("plugins.disabled"); - if (orderStr == null || orderStr.trim().isEmpty()) return null; - - String[] ids = orderStr.split(","); - List disabledList = new ArrayList<>(); + Set disabledIds = new HashSet<>(); if (disabledStr != null && !disabledStr.trim().isEmpty()) { for (String s : disabledStr.split(",")) { - disabledList.add(s.trim()); + disabledIds.add(s.trim()); } } java.util.Set result = new java.util.LinkedHashSet<>(); - for (String id : ids) { - id = id.trim(); - if (id.isEmpty()) continue; - if (!disabledList.contains(id)) { - result.add(id); + if (orderStr != null && !orderStr.trim().isEmpty()) { + for (String rawId : orderStr.split(",")) { + String id = rawId.trim(); + if (!id.isEmpty() && !disabledIds.contains(id)) { + result.add(id); + } } } - return result.isEmpty() ? null : result; + + // plugins.order only controls ordering. A plugin introduced by a newer + // WorkUtils version is enabled by default unless explicitly disabled. + allPlugins.stream() + .sorted(Comparator.comparingInt(plugin -> plugin.getDescriptor().getOrder())) + .map(Plugin::getId) + .filter(id -> !disabledIds.contains(id)) + .forEach(result::add); + return result; } catch (IOException e) { log.warn("读取插件配置文件失败: {}", file.toAbsolutePath(), e); return null; diff --git a/src/main/resources/templates/plugins.config b/src/main/resources/templates/plugins.config index 4bb8ab7..2f65a09 100644 --- a/src/main/resources/templates/plugins.config +++ b/src/main/resources/templates/plugins.config @@ -1,5 +1,5 @@ # ====== WorkUtils 插件配置文件 ====== # 插件顺序(按逗号分隔,顺序即菜单显示顺序) # 插件状态(disabled 列表,不在列表中的即为启用) -plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc +plugins.order=git-sync,git-review,diff,ai-unit-test,mybatisexport,mybatisgenerator,scan,api-doc plugins.disabled=mobile-ui-auto diff --git a/src/test/java/com/example/workutils/system/plugin/DefaultPluginConfigurationTest.java b/src/test/java/com/example/workutils/system/plugin/DefaultPluginConfigurationTest.java index aecc177..62bc1c8 100644 --- a/src/test/java/com/example/workutils/system/plugin/DefaultPluginConfigurationTest.java +++ b/src/test/java/com/example/workutils/system/plugin/DefaultPluginConfigurationTest.java @@ -4,7 +4,6 @@ import com.example.workutils.system.config.WorkUtilsProperties; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -17,12 +16,12 @@ class DefaultPluginConfigurationTest { Path tempDir; @Test - void defaultConfigurationLoadsEveryPluginExceptMobileAutomation() throws Exception { + void existingConfigurationAutomaticallyEnablesNewPluginsUnlessExplicitlyDisabled() throws Exception { Path configFile = tempDir.resolve("plugins.config"); - try (InputStream input = getClass().getClassLoader() - .getResourceAsStream("templates/plugins.config")) { - Files.copy(input, configFile); - } + Files.writeString(configFile, """ + plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc + plugins.disabled=mobile-ui-auto + """); WorkUtilsProperties properties = new WorkUtilsProperties(); properties.setPluginsConfigFile(configFile.toString()); @@ -30,6 +29,7 @@ class DefaultPluginConfigurationTest { plugin("scan"), plugin("diff"), plugin("api-doc"), + plugin("ai-unit-test"), plugin("git-sync"), plugin("git-review"), plugin("mobile-ui-auto"), @@ -39,10 +39,10 @@ class DefaultPluginConfigurationTest { PluginManager manager = new PluginManager(plugins, properties); manager.init(); - assertEquals(7, manager.getEnabledPlugins().size()); + assertEquals(8, manager.getEnabledPlugins().size()); assertEquals( List.of("git-sync", "git-review", "diff", "mybatisexport", - "mybatisgenerator", "scan", "api-doc"), + "mybatisgenerator", "scan", "api-doc", "ai-unit-test"), manager.getEnabledPlugins().stream().map(Plugin::getId).toList()); }