Cleaned up params implementation
This commit is contained in:
@@ -71,7 +71,6 @@ namespace Discord.Commands
|
||||
{
|
||||
var parameter = parameters[i];
|
||||
var type = parameter.ParameterType;
|
||||
Type underlyingType = null;
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
@@ -81,20 +80,18 @@ namespace Discord.Commands
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO: is there a better way of detecting 'params'?
|
||||
bool isParams = type.IsArray && i == parameters.Length - 1;
|
||||
if (isParams)
|
||||
underlyingType = type.GetElementType();
|
||||
else
|
||||
underlyingType = type;
|
||||
//Detect 'params'
|
||||
bool isMultiple = parameter.GetCustomAttribute<ParamArrayAttribute>() != null;
|
||||
if (isMultiple)
|
||||
type = type.GetElementType();
|
||||
|
||||
var reader = Module.Service.GetTypeReader(underlyingType);
|
||||
var underlyingTypeInfo = underlyingType.GetTypeInfo();
|
||||
var reader = Module.Service.GetTypeReader(type);
|
||||
var typeInfo = type.GetTypeInfo();
|
||||
|
||||
if (reader == null && underlyingTypeInfo.IsEnum)
|
||||
//Detect enums
|
||||
if (reader == null && typeInfo.IsEnum)
|
||||
{
|
||||
reader = EnumTypeReader.GetReader(underlyingType);
|
||||
reader = EnumTypeReader.GetReader(type);
|
||||
Module.Service.AddTypeReader(type, reader);
|
||||
}
|
||||
|
||||
@@ -110,7 +107,7 @@ namespace Discord.Commands
|
||||
bool isOptional = parameter.IsOptional;
|
||||
object defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null;
|
||||
|
||||
paramBuilder.Add(new CommandParameter(name, description, type, underlyingType, reader, isOptional, isRemainder, isParams, defaultValue));
|
||||
paramBuilder.Add(new CommandParameter(name, description, type, reader, isOptional, isRemainder, isMultiple, defaultValue));
|
||||
}
|
||||
return paramBuilder.ToImmutable();
|
||||
}
|
||||
@@ -118,8 +115,7 @@ namespace Discord.Commands
|
||||
{
|
||||
if (methodInfo.ReturnType != typeof(Task))
|
||||
throw new InvalidOperationException("Commands must return a non-generic Task.");
|
||||
|
||||
//TODO: Temporary reflection hack. Lets build an actual expression tree here.
|
||||
|
||||
return (msg, args) =>
|
||||
{
|
||||
object[] newArgs = new object[args.Count + 1];
|
||||
|
||||
Reference in New Issue
Block a user