Browse Source

Minor fixes around OnModuleBuilding (#1116)

* Don't attempt instantiation of an abstract module
* Attempt associating a TypeReader in case one is registered late (ie. OnModuleBuilding)
pull/1121/head
Joe4evr Christopher F 6 years ago
parent
commit
5dad0fa1a1
2 changed files with 14 additions and 12 deletions
  1. +1
    -1
      src/Discord.Net.Commands/Builders/ModuleBuilder.cs
  2. +13
    -11
      src/Discord.Net.Commands/Builders/ParameterBuilder.cs

+ 1
- 1
src/Discord.Net.Commands/Builders/ModuleBuilder.cs View File

@@ -120,7 +120,7 @@ namespace Discord.Commands.Builders
if (Name == null)
Name = _aliases[0];

if (TypeInfo != null)
if (TypeInfo != null && !TypeInfo.IsAbstract)
{
var moduleInstance = ReflectionUtils.CreateObject<IModuleBase>(TypeInfo, service, services);
moduleInstance.OnModuleBuilding(service, this);


+ 13
- 11
src/Discord.Net.Commands/Builders/ParameterBuilder.cs View File

@@ -45,14 +45,7 @@ namespace Discord.Commands.Builders

internal void SetType(Type type)
{
var readers = Command.Module.Service.GetTypeReaders(type);
if (readers != null)
TypeReader = readers.FirstOrDefault().Value;
else
TypeReader = Command.Module.Service.GetDefaultTypeReader(type);

if (TypeReader == null)
throw new InvalidOperationException($"{type} does not have a TypeReader registered for it. Parameter: {Name} in {Command.PrimaryAlias}");
TypeReader = GetReader(type);

if (type.GetTypeInfo().IsValueType)
DefaultValue = Activator.CreateInstance(type);
@@ -60,7 +53,16 @@ namespace Discord.Commands.Builders
type = ParameterType.GetElementType();
ParameterType = type;
}

private TypeReader GetReader(Type type)
{
var readers = Command.Module.Service.GetTypeReaders(type);
if (readers != null)
return readers.FirstOrDefault().Value;
else
return Command.Module.Service.GetDefaultTypeReader(type);
}

public ParameterBuilder WithSummary(string summary)
{
Summary = summary;
@@ -100,10 +102,10 @@ namespace Discord.Commands.Builders

internal ParameterInfo Build(CommandInfo info)
{
if (TypeReader == null)
if ((TypeReader ?? (TypeReader = GetReader(ParameterType))) == null)
throw new InvalidOperationException($"No type reader found for type {ParameterType.Name}, one must be specified");

return new ParameterInfo(this, info, Command.Module.Service);
}
}
}
}

Loading…
Cancel
Save