Fix StringConstant params

This commit is contained in:
Him188 2020-10-24 11:41:32 +08:00
parent 151a5d5735
commit b3880093bf

View File

@ -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<*> {