mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 18:40:15 +08:00
Fix StringConstant params
This commit is contained in:
parent
151a5d5735
commit
b3880093bf
@ -36,8 +36,11 @@ internal object CompositeCommandSubCommandAnnotationResolver :
|
|||||||
override fun hasAnnotation(ownerCommand: Command, function: KFunction<*>) =
|
override fun hasAnnotation(ownerCommand: Command, function: KFunction<*>) =
|
||||||
function.hasAnnotation<CompositeCommand.SubCommand>()
|
function.hasAnnotation<CompositeCommand.SubCommand>()
|
||||||
|
|
||||||
override fun getSubCommandNames(ownerCommand: Command, function: KFunction<*>): Array<out String> =
|
override fun getSubCommandNames(ownerCommand: Command, function: KFunction<*>): Array<out String> {
|
||||||
function.findAnnotation<CompositeCommand.SubCommand>()!!.value
|
val annotated = function.findAnnotation<CompositeCommand.SubCommand>()!!.value
|
||||||
|
return if (annotated.isEmpty()) arrayOf(function.name)
|
||||||
|
else annotated
|
||||||
|
}
|
||||||
|
|
||||||
override fun getAnnotatedName(ownerCommand: Command, parameter: KParameter): String? =
|
override fun getAnnotatedName(ownerCommand: Command, parameter: KParameter): String? =
|
||||||
parameter.findAnnotation<CompositeCommand.Name>()?.value
|
parameter.findAnnotation<CompositeCommand.Name>()?.value
|
||||||
@ -190,7 +193,7 @@ internal class CommandReflector(
|
|||||||
.map { function ->
|
.map { function ->
|
||||||
|
|
||||||
val functionNameAsValueParameter =
|
val functionNameAsValueParameter =
|
||||||
annotationResolver.getSubCommandNames(command, function).map { createStringConstantParameter(it) }
|
annotationResolver.getSubCommandNames(command, function).mapIndexed { index, s -> createStringConstantParameter(index, s) }
|
||||||
|
|
||||||
val functionValueParameters =
|
val functionValueParameters =
|
||||||
function.valueParameters.associateBy { it.toUserDefinedCommandParameter() }
|
function.valueParameters.associateBy { it.toUserDefinedCommandParameter() }
|
||||||
@ -202,7 +205,10 @@ internal class CommandReflector(
|
|||||||
) { call ->
|
) { call ->
|
||||||
val args = LinkedHashMap<KParameter, Any?>()
|
val args = LinkedHashMap<KParameter, Any?>()
|
||||||
|
|
||||||
call.resolvedValueArguments.forEach { (commandParameter, value) ->
|
for ((commandParameter, value) in call.resolvedValueArguments) {
|
||||||
|
if (commandParameter is AbstractCommandValueParameter.StringConstant) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
val functionParameter =
|
val functionParameter =
|
||||||
functionValueParameters[commandParameter] ?: error("Could not find a corresponding function parameter '${commandParameter.name}'")
|
functionValueParameters[commandParameter] ?: error("Could not find a corresponding function parameter '${commandParameter.name}'")
|
||||||
args[functionParameter] = value
|
args[functionParameter] = value
|
||||||
@ -224,8 +230,8 @@ internal class CommandReflector(
|
|||||||
return CommandReceiverParameter(this.type.isMarkedNullable, this.type)
|
return CommandReceiverParameter(this.type.isMarkedNullable, this.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createStringConstantParameter(expectingValue: String): AbstractCommandValueParameter.StringConstant {
|
private fun createStringConstantParameter(index: Int, expectingValue: String): AbstractCommandValueParameter.StringConstant {
|
||||||
return AbstractCommandValueParameter.StringConstant(null, expectingValue)
|
return AbstractCommandValueParameter.StringConstant("#$index", expectingValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun KParameter.toUserDefinedCommandParameter(): AbstractCommandValueParameter.UserDefinedType<*> {
|
private fun KParameter.toUserDefinedCommandParameter(): AbstractCommandValueParameter.UserDefinedType<*> {
|
||||||
|
Loading…
Reference in New Issue
Block a user