From 7ffb8ed8c47aa35950a011420a30a600b16b03f5 Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Tue, 21 Feb 2017 21:58:05 +0000 Subject: [PATCH 1/3] Add type constraints for Add/RemoveModuleAsync --- src/Discord.Net.Commands/CommandService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index 2c7955028..cc60f7c18 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -73,7 +73,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task AddModuleAsync() + public async Task AddModuleAsync() where T : ModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try @@ -86,7 +86,7 @@ namespace Discord.Commands var module = ModuleClassBuilder.Build(this, typeInfo).FirstOrDefault(); if (module.Value == default(ModuleInfo)) - throw new InvalidOperationException($"Could not build the module {typeof(T).FullName}, did you pass an invalid type?"); + throw new InvalidOperationException($"Could not build the module {typeof(T).FullName}"); _typedModuleDefs[module.Key] = module.Value; @@ -143,7 +143,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task RemoveModuleAsync() + public async Task RemoveModuleAsync() where T : ModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try From 050e7d79d280d56b239bcd85b65bf3bc4b6acdf5 Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Tue, 21 Feb 2017 22:06:16 +0000 Subject: [PATCH 2/3] ModuleBase -> IModuleBase --- src/Discord.Net.Commands/CommandService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index cc60f7c18..54a527c0b 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -73,7 +73,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task AddModuleAsync() where T : ModuleBase + public async Task AddModuleAsync() where T : IModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try @@ -143,7 +143,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task RemoveModuleAsync() where T : ModuleBase + public async Task RemoveModuleAsync() where T : IModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try From 57e0f7880345779b53edc0f28530cd7eba467810 Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Wed, 22 Feb 2017 18:44:38 +0000 Subject: [PATCH 3/3] Use type constraints which actually compile :hash:BlameFoxbot --- src/Discord.Net.Commands/CommandService.cs | 4 ++-- src/Discord.Net.Commands/IModuleBase.cs | 7 ++++++- src/Discord.Net.Commands/ModuleBase.cs | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index 54a527c0b..3933742f3 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -73,7 +73,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task AddModuleAsync() where T : IModuleBase + public async Task AddModuleAsync() where T : IModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try @@ -143,7 +143,7 @@ namespace Discord.Commands _moduleLock.Release(); } } - public async Task RemoveModuleAsync() where T : IModuleBase + public async Task RemoveModuleAsync() where T : IModuleBase { await _moduleLock.WaitAsync().ConfigureAwait(false); try diff --git a/src/Discord.Net.Commands/IModuleBase.cs b/src/Discord.Net.Commands/IModuleBase.cs index fda768b53..14caea612 100644 --- a/src/Discord.Net.Commands/IModuleBase.cs +++ b/src/Discord.Net.Commands/IModuleBase.cs @@ -1,5 +1,10 @@ -namespace Discord.Commands +namespace Discord.Commands { + public interface IModuleBase + where T : ICommandContext + { + } + internal interface IModuleBase { void SetContext(ICommandContext context); diff --git a/src/Discord.Net.Commands/ModuleBase.cs b/src/Discord.Net.Commands/ModuleBase.cs index a38ffce06..c85a4b4ba 100644 --- a/src/Discord.Net.Commands/ModuleBase.cs +++ b/src/Discord.Net.Commands/ModuleBase.cs @@ -5,7 +5,7 @@ namespace Discord.Commands { public abstract class ModuleBase : ModuleBase { } - public abstract class ModuleBase : IModuleBase + public abstract class ModuleBase : IModuleBase, IModuleBase where T : class, ICommandContext { public T Context { get; private set; }