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.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
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>
|
/// <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)
|
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);
|
_defaultTypeReaders.AddOrUpdate(type, reader, (k, v) => reader);
|
||||||
if (type.GetTypeInfo().IsValueType)
|
if (type.GetTypeInfo().IsValueType)
|
||||||
@@ -281,6 +281,16 @@ namespace Discord.Commands
|
|||||||
AddNullableTypeReader(type, reader);
|
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)
|
internal void AddNullableTypeReader(Type valueType, TypeReader valueTypeReader)
|
||||||
{
|
{
|
||||||
var readers = _typeReaders.GetOrAdd(typeof(Nullable<>).MakeGenericType(valueType), x => new ConcurrentDictionary<Type, TypeReader>());
|
var readers = _typeReaders.GetOrAdd(typeof(Nullable<>).MakeGenericType(valueType), x => new ConcurrentDictionary<Type, TypeReader>());
|
||||||
|
|||||||
Reference in New Issue
Block a user