From eb95436404af2f41ab978deb91eb88a5842c7af4 Mon Sep 17 00:00:00 2001 From: LamGC Date: Mon, 28 Mar 2022 21:38:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(extension):=20=E4=BF=AE=E5=A4=8D=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=89=A9=E5=B1=95=E5=AF=B9=E8=B1=A1=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E4=BC=9A=E5=87=BA=E7=8E=B0=E7=9A=84=20NPE=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建对象后没有检查 NPE 问题, 修复该问题后有助于接受 Factory 不提供扩展的情况(现在这个情况是允许的了). --- scalabot-app/src/main/kotlin/ExtensionComponents.kt | 4 ++++ .../net/lamgc/scalabot/extension/BotExtensionFactory.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/scalabot-app/src/main/kotlin/ExtensionComponents.kt b/scalabot-app/src/main/kotlin/ExtensionComponents.kt index a5b7315..361e70f 100644 --- a/scalabot-app/src/main/kotlin/ExtensionComponents.kt +++ b/scalabot-app/src/main/kotlin/ExtensionComponents.kt @@ -90,6 +90,10 @@ internal class ExtensionLoader( try { val extension = factory.createExtensionInstance(bot, getExtensionDataFolder(extensionArtifact)) + if (extension == null) { + log.debug { "Factory ${factory::class.java} 创建插件时返回了 null, 已跳过. (BotName: ${bot.botUsername})" } + continue + } factories.add(LoadedExtensionEntry(extensionArtifact, factory::class.java, extension)) } catch (e: Exception) { log.error(e) { "创建扩展时发生异常. (ExtArtifact: `$extensionArtifact`, Factory: ${factory::class.java.name})" } diff --git a/scalabot-extension/src/main/java/net/lamgc/scalabot/extension/BotExtensionFactory.java b/scalabot-extension/src/main/java/net/lamgc/scalabot/extension/BotExtensionFactory.java index 4c6a2dc..54ec030 100644 --- a/scalabot-extension/src/main/java/net/lamgc/scalabot/extension/BotExtensionFactory.java +++ b/scalabot-extension/src/main/java/net/lamgc/scalabot/extension/BotExtensionFactory.java @@ -27,7 +27,7 @@ public interface BotExtensionFactory { * @param bot 机器人对象. * @param shareDataFolder ScalaBot App 为扩展提供的共享数据目录, 同一个扩展包的 Factory 接收到的共享数据目录都是一样的; * 建议将数据存储在数据目录中, 便于数据的存储管理. - * @return 返回为该 Bot 对象创建的扩展对象. + * @return 返回为该 Bot 对象创建的扩展对象, 如果不希望为该机器人提供扩展, 可返回 {@code null}. */ AbilityExtension createExtensionInstance(BaseAbilityBot bot, File shareDataFolder);