1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 04:50:26 +08:00

[console] Fix plugin dependencies checking skipped already loaded plugins

This commit is contained in:
Karlatemp 2023-07-25 16:24:44 +08:00
parent 137b4536ae
commit 7f872edb93
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59

View File

@ -20,6 +20,7 @@ import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage
import net.mamoe.mirai.console.plugin.NotYetLoadedPlugin
import net.mamoe.mirai.console.plugin.Plugin
import net.mamoe.mirai.console.plugin.PluginManager
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.description
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.safeLoader
import net.mamoe.mirai.console.plugin.description.PluginDependency
import net.mamoe.mirai.console.plugin.description.PluginDescription
@ -209,6 +210,8 @@ internal class PluginManagerImpl(
@Throws(PluginResolutionException::class)
private fun <D : PluginDescription> List<D>.sortByDependencies(): List<D> {
val alreadyLoadedPlugins = resolvedPlugins.asSequence().map { it.description }.toList() // snapshot
val originPluginDescriptions = this@sortByDependencies
val pending2BeResolved = originPluginDescriptions.toMutableList()
val resolved = ArrayList<D>(pending2BeResolved.size)
@ -254,6 +257,8 @@ internal class PluginManagerImpl(
pending2BeResolved.forEach { pluginDesc ->
val missed = pluginDesc.dependencies.filter { dependency ->
val resolvedDep = originPluginDescriptions.findDependency(dependency)
?: alreadyLoadedPlugins.findDependency(dependency)
if (resolvedDep != null) {
resolvedDep.checkSatisfies(dependency, pluginDesc)
false