1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-24 20:43:33 +08:00

修复反射用法

This commit is contained in:
hundun 2022-06-26 10:22:15 +08:00
parent db5d0b327c
commit 1851e267a3
3 changed files with 10 additions and 27 deletions
mirai-console/backend/mirai-console

View File

@ -106,9 +106,7 @@ public abstract class CompositeCommand(
@ExperimentalCommandDescriptors
public final override val overloads: List<@JvmWildcard CommandSignatureFromKFunction> by lazy {
reflector.findSubCommands().also {
reflector.validate(it)
}
overloadImpls
}
/**

View File

@ -354,8 +354,10 @@ internal class CommandReflector(
val fromMemberProperties = command::class.declaredMemberProperties
.asSequence()
.filter { it.isSubCommandProperty() }
.filterIsInstance(CompositeCommand::class.java)
.map { it.getter.call(command) }
.filter { it is CompositeCommand }
.flatMap { property ->
property as CompositeCommand
property.overloadImpls
}.toList()

View File

@ -39,20 +39,14 @@ class TestParentCompositeCommand : CompositeCommand(
"testParentComposite", "tsPC"
) {
class ChildCompositeCommand1 : CompositeCommand(
owner,
"testChildComposite1", "tsCC1"
) {
class ChildCompositeCommand1 : CompositeCommand(owner, "useless") {
@SubCommand
fun foo(seconds: Int) {
Testing.ok(seconds)
}
}
class ChildCompositeCommand2 : CompositeCommand(
owner,
"testChildComposite2", "tsCC2"
) {
class ChildCompositeCommand2 : CompositeCommand(owner, "useless") {
@SubCommand
fun bar(seconds: Int) {
Testing.ok(seconds)
@ -546,24 +540,13 @@ internal class InstanceTestCommand : AbstractConsoleInstanceTest() {
fun `parent composite command executing`() = runBlocking {
parentCompositeCommand.withRegistration {
assertEquals(1, withTesting {
assertSuccess(
parentCompositeCommand.execute(sender, "parentFoo 1")
)
assertSuccess(parentCompositeCommand.execute(sender, "parentFoo 1"))
})
assertEquals(1, withTesting {
assertSuccess(
parentCompositeCommand.execute(sender, "parentBar 1")
)
assertSuccess(parentCompositeCommand.execute(sender, "parentBar 1"))
})
assertEquals(1, withTesting {
assertSuccess(
parentCompositeCommand.execute(sender, "foo 1")
)
})
assertEquals(1, withTesting {
assertSuccess(
parentCompositeCommand.execute(sender, "foo 1")
)
assertEquals(2, withTesting {
assertSuccess(parentCompositeCommand.execute(sender, "foo 2"))
})
assertEquals(2, withTesting {
assertSuccess(parentCompositeCommand.execute(sender, "bar 2"))