Patch lazy default readers not getting replaced (#1083)
This commit is contained in:
committed by
Christopher F
parent
322d46e47b
commit
4bc06a0a54
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
@@ -262,7 +262,7 @@ namespace Discord.Commands
|
||||
/// <param name="replaceDefault">If <paramref name="reader"/> should replace the default <see cref="TypeReader"/> for <paramref name="type"/> if one exists.</param>
|
||||
public void AddTypeReader(Type type, TypeReader reader, bool replaceDefault)
|
||||
{
|
||||
if (replaceDefault && _defaultTypeReaders.ContainsKey(type))
|
||||
if (replaceDefault && HasDefaultTypeReader(type))
|
||||
{
|
||||
_defaultTypeReaders.AddOrUpdate(type, reader, (k, v) => reader);
|
||||
if (type.GetTypeInfo().IsValueType)
|
||||
@@ -281,6 +281,16 @@ namespace Discord.Commands
|
||||
AddNullableTypeReader(type, reader);
|
||||
}
|
||||
}
|
||||
internal bool HasDefaultTypeReader(Type type)
|
||||
{
|
||||
if (_defaultTypeReaders.ContainsKey(type))
|
||||
return true;
|
||||
|
||||
var typeInfo = type.GetTypeInfo();
|
||||
if (typeInfo.IsEnum)
|
||||
return true;
|
||||
return _entityTypeReaders.Any(x => type == x.Item1 || typeInfo.ImplementedInterfaces.Contains(x.Item2));
|
||||
}
|
||||
internal void AddNullableTypeReader(Type valueType, TypeReader valueTypeReader)
|
||||
{
|
||||
var readers = _typeReaders.GetOrAdd(typeof(Nullable<>).MakeGenericType(valueType), x => new ConcurrentDictionary<Type, TypeReader>());
|
||||
|
||||
Reference in New Issue
Block a user