refactor(extension): 在搜索到扩展包的情况下不再继续使用低优先级搜索器.

在高优先级搜索器找到一个或以上的扩展包时, 停止调用更低优先级的搜索器,
这有助于避免无意义的远端扩展包搜索行为, 在本地搜索到扩展包后就没有必要再触发远端搜索器搜索了.
This commit is contained in:
2022-02-19 23:26:38 +08:00
parent 52a97b892c
commit f8f80840c6

View File

@ -29,7 +29,7 @@ internal class ExtensionLoader(
fun getExtensions(): Set<LoadedExtensionEntry> { fun getExtensions(): Set<LoadedExtensionEntry> {
val extensionEntries = mutableSetOf<LoadedExtensionEntry>() val extensionEntries = mutableSetOf<LoadedExtensionEntry>()
for (extensionArtifact in bot.extensions) { for (extensionArtifact in bot.extensions) {
val extensionFilesMap = findExtensionPackageFile(extensionArtifact) val extensionFilesMap = findExtensionPackage(extensionArtifact)
val foundedNumber = allFoundedPackageNumber(extensionFilesMap) val foundedNumber = allFoundedPackageNumber(extensionFilesMap)
if (checkConflict(extensionFilesMap)) { if (checkConflict(extensionFilesMap)) {
printExtensionFileConflictError(extensionArtifact, extensionFilesMap) printExtensionFileConflictError(extensionArtifact, extensionFilesMap)
@ -105,11 +105,19 @@ internal class ExtensionLoader(
return result.size return result.size
} }
private fun findExtensionPackageFile( private fun findExtensionPackage(
extensionArtifact: Artifact, extensionArtifact: Artifact,
): Map<ExtensionPackageFinder, Set<FoundExtensionPackage>> { ): Map<ExtensionPackageFinder, Set<FoundExtensionPackage>> {
val result = mutableMapOf<ExtensionPackageFinder, Set<FoundExtensionPackage>>() val result = mutableMapOf<ExtensionPackageFinder, Set<FoundExtensionPackage>>()
for (finder in finders) { val sortedFinders = finders.sortedBy { it.getPriority() }
var highPriority = sortedFinders.first().getPriority()
for (finder in sortedFinders) {
if (finder.getPriority() > highPriority && result.isNotEmpty()) {
break
}
highPriority = finder.getPriority()
if (!checkExtensionPackageFinder(finder)) { if (!checkExtensionPackageFinder(finder)) {
continue continue
} }