Skip to content

Commit 8f4b081

Browse files
committed
CSHARP-5572: Refactoring.
1 parent 27a540e commit 8f4b081

File tree

9 files changed

+28
-57
lines changed

9 files changed

+28
-57
lines changed

src/MongoDB.Bson/Serialization/Serializers/DictionarySerializerBase.cs

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ namespace MongoDB.Bson.Serialization.Serializers
2727
/// <typeparam name="TDictionary">The type of the dictionary.</typeparam>
2828
public abstract class DictionarySerializerBase<TDictionary> :
2929
ClassSerializerBase<TDictionary>,
30-
IBsonDocumentSerializer,
3130
IBsonDictionarySerializer
3231
where TDictionary : class, IDictionary
3332
{
@@ -132,22 +131,6 @@ obj is DictionarySerializerBase<TDictionary> other &&
132131
/// <inheritdoc/>
133132
public override int GetHashCode() => 0;
134133

135-
/// <inheritdoc/>
136-
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
137-
{
138-
if (_dictionaryRepresentation != DictionaryRepresentation.Document)
139-
{
140-
serializationInfo = null;
141-
return false;
142-
}
143-
144-
serializationInfo = new BsonSerializationInfo(
145-
memberName,
146-
_valueSerializer,
147-
_valueSerializer.ValueType);
148-
return true;
149-
}
150-
151134
// protected methods
152135
/// <summary>
153136
/// Deserializes a value.
@@ -355,7 +338,6 @@ private string SerializeKeyString(object key)
355338
public abstract class DictionarySerializerBase<TDictionary, TKey, TValue> :
356339
ClassSerializerBase<TDictionary>,
357340
IBsonArraySerializer,
358-
IBsonDocumentSerializer,
359341
IBsonDictionarySerializer
360342
where TDictionary : class, IEnumerable<KeyValuePair<TKey, TValue>>
361343
{
@@ -510,13 +492,6 @@ public bool TryGetItemSerializationInfo(out BsonSerializationInfo serializationI
510492
return true;
511493
}
512494

513-
/// <inheritdoc/>
514-
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
515-
{
516-
serializationInfo = null;
517-
return false;
518-
}
519-
520495
// protected methods
521496
/// <summary>
522497
/// Deserializes a value.

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderVisitBinary.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ protected override Expression VisitBinary(BinaryExpression node)
5555
IsKnown(leftExpression, out var leftSerializer))
5656
{
5757
IBsonSerializer itemSerializer;
58-
if (leftSerializer is IFixedSizeArraySerializer fixedSizeArraySerializer)
58+
if (leftSerializer is IPolymorphicArraySerializer polymorphicArraySerializer)
5959
{
6060
var index = rightExpression.GetConstantValue<int>(node);
61-
itemSerializer = fixedSizeArraySerializer.GetItemSerializer(index);
61+
itemSerializer = polymorphicArraySerializer.GetItemSerializer(index);
6262
}
6363
else
6464
{

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderVisitNewArray.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ void DeduceNewArrayInitSerializers()
5959

6060
if (AnyIsNotKnown(itemExpressions) && IsKnown(node, out var arraySerializer))
6161
{
62-
if (arraySerializer is IFixedSizeArraySerializer fixedSizeArraySerializer)
62+
if (arraySerializer is IPolymorphicArraySerializer polymorphicArraySerializer)
6363
{
6464
for (var i = 0; i < itemExpressions.Count; i++)
6565
{
6666
var itemExpression = itemExpressions[i];
6767
if (IsNotKnown(itemExpression))
6868
{
69-
var itemSerializer = fixedSizeArraySerializer.GetItemSerializer(i);
69+
var itemSerializer = polymorphicArraySerializer.GetItemSerializer(i);
7070
AddKnownSerializer(itemExpression, itemSerializer);
7171
}
7272
}
@@ -110,7 +110,7 @@ void DeduceNewArrayInitSerializers()
110110
else
111111
{
112112
var itemType = node.Type.GetElementType();
113-
arraySerializer = FixedSizeArraySerializer.Create(itemType, itemSerializers);
113+
arraySerializer = PolymorphicArraySerializer.Create(itemType, itemSerializers);
114114
}
115115
AddKnownSerializer(node, arraySerializer);
116116
}

src/MongoDB.Driver/Linq/Linq3Implementation/Misc/IBsonSerializerExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ public static IBsonSerializer GetItemSerializer(this IBsonSerializer serializer)
5151

5252
public static IBsonSerializer GetItemSerializer(this IBsonSerializer serializer, int index)
5353
{
54-
if (serializer is IFixedSizeArraySerializer fixedSizeArraySerializer)
54+
if (serializer is IPolymorphicArraySerializer polymorphicArraySerializer)
5555
{
56-
return fixedSizeArraySerializer.GetItemSerializer(index);
56+
return polymorphicArraySerializer.GetItemSerializer(index);
5757
}
5858
else
5959
{
@@ -63,10 +63,10 @@ public static IBsonSerializer GetItemSerializer(this IBsonSerializer serializer,
6363

6464
public static IBsonSerializer GetItemSerializer(this IBsonSerializer serializer, Expression indexExpression, Expression containingExpression)
6565
{
66-
if (serializer is IFixedSizeArraySerializer fixedSizeArraySerializer)
66+
if (serializer is IPolymorphicArraySerializer polymorphicArraySerializer)
6767
{
6868
var index = indexExpression.GetConstantValue<int>(containingExpression);
69-
return fixedSizeArraySerializer.GetItemSerializer(index);
69+
return polymorphicArraySerializer.GetItemSerializer(index);
7070
}
7171
else
7272
{

src/MongoDB.Driver/Linq/Linq3Implementation/Misc/TypeExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public static bool IsBoolean(this Type type)
226226

227227
public static bool IsBooleanOrNullableBoolean(this Type type)
228228
{
229-
return type == typeof(bool) || type.IsNullable(out var valueType) && IsBoolean(valueType);
229+
return IsBoolean(type) || type.IsNullable(out var valueType) && IsBoolean(valueType);
230230
}
231231

232232
public static bool IsEnum(this Type type, out Type underlyingType)

src/MongoDB.Driver/Linq/Linq3Implementation/Serializers/AsEnumUnderlyingTypeSerializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public static IBsonSerializer Create(IBsonSerializer enumSerializer)
8282
{
8383
var enumType = enumSerializer.ValueType;
8484
var underlyingType = Enum.GetUnderlyingType(enumType);
85-
var toEnumUnderlyingTypeSerializerType = typeof(AsEnumUnderlyingTypeSerializer<,>).MakeGenericType(enumType, underlyingType);
86-
return (IBsonSerializer)Activator.CreateInstance(toEnumUnderlyingTypeSerializerType, enumSerializer);
85+
var asEnumUnderlyingTypeSerializerType = typeof(AsEnumUnderlyingTypeSerializer<,>).MakeGenericType(enumType, underlyingType);
86+
return (IBsonSerializer)Activator.CreateInstance(asEnumUnderlyingTypeSerializerType, enumSerializer);
8787
}
8888
}
8989
}

src/MongoDB.Driver/Linq/Linq3Implementation/Serializers/AsUnderlyingTypeEnumSerializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ internal static class AsUnderlyingTypeEnumSerializer
8181
public static IBsonSerializer Create(Type enumType, IBsonSerializer underlyingTypeSerializer)
8282
{
8383
var underlyingType = Enum.GetUnderlyingType(enumType);
84-
var toUnderlyingTypeEnumSerializerType = typeof(AsUnderlyingTypeEnumSerializer<,>).MakeGenericType(enumType, underlyingType);
85-
return (IBsonSerializer)Activator.CreateInstance(toUnderlyingTypeEnumSerializerType, underlyingTypeSerializer);
84+
var asUnderlyingTypeEnumSerializerType = typeof(AsUnderlyingTypeEnumSerializer<,>).MakeGenericType(enumType, underlyingType);
85+
return (IBsonSerializer)Activator.CreateInstance(asUnderlyingTypeEnumSerializerType, underlyingTypeSerializer);
8686
}
8787
}
8888
}

src/MongoDB.Driver/Linq/Linq3Implementation/Serializers/NumericConversionSerializer.cs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,20 @@ public static IBsonSerializer Create(Type sourceType, Type targetType, IBsonSeri
3131

3232
internal class NumericConversionSerializer<TSource, TTarget> : SerializerBase<TTarget>, IHasRepresentationSerializer
3333
{
34+
private readonly BsonType _representation;
3435
private readonly IBsonSerializer<TSource> _sourceSerializer;
3536

36-
public BsonType Representation
37+
public BsonType Representation => _representation;
38+
39+
public NumericConversionSerializer(IBsonSerializer<TSource> sourceSerializer)
3740
{
38-
get
41+
if (sourceSerializer is not IHasRepresentationSerializer hasRepresentationSerializer)
3942
{
40-
if (_sourceSerializer is not IHasRepresentationSerializer hasRepresentationSerializer)
41-
{
42-
throw new NotSupportedException($"Serializer class {_sourceSerializer.GetType().Name} does not implement IHasRepresentationSerializer.");
43-
}
44-
45-
return hasRepresentationSerializer.Representation;
43+
throw new NotSupportedException($"Serializer class {sourceSerializer.GetType().Name} does not implement IHasRepresentationSerializer.");
4644
}
47-
}
4845

49-
public NumericConversionSerializer(IBsonSerializer<TSource> sourceSerializer)
50-
{
5146
_sourceSerializer = sourceSerializer;
47+
_representation = hasRepresentationSerializer.Representation;
5248
}
5349

5450
public override TTarget Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)

src/MongoDB.Driver/Linq/Linq3Implementation/Serializers/FixedSizeArraySerializer.cs renamed to src/MongoDB.Driver/Linq/Linq3Implementation/Serializers/PolymorphicArraySerializer.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,25 @@
2222

2323
namespace MongoDB.Driver.Linq.Linq3Implementation.Serializers;
2424

25-
internal interface IFixedSizeArraySerializer
25+
internal interface IPolymorphicArraySerializer
2626
{
2727
IBsonSerializer GetItemSerializer(int index);
2828
}
2929

30-
internal static class FixedSizeArraySerializer
30+
internal static class PolymorphicArraySerializer
3131
{
3232
public static IBsonSerializer Create(Type itemType, IEnumerable<IBsonSerializer> itemSerializers)
3333
{
34-
var serializerType = typeof(FixedSizeArraySerializer<>).MakeGenericType(itemType);
34+
var serializerType = typeof(PolymorphicArraySerializer<>).MakeGenericType(itemType);
3535
return (IBsonSerializer)Activator.CreateInstance(serializerType, itemSerializers);
3636
}
3737
}
3838

39-
internal sealed class FixedSizeArraySerializer<TItem> : SerializerBase<TItem[]>, IFixedSizeArraySerializer
39+
internal sealed class PolymorphicArraySerializer<TItem> : SerializerBase<TItem[]>, IPolymorphicArraySerializer
4040
{
4141
private readonly IReadOnlyList<IBsonSerializer> _itemSerializers;
4242

43-
public FixedSizeArraySerializer(IEnumerable<IBsonSerializer> itemSerializers)
43+
public PolymorphicArraySerializer(IEnumerable<IBsonSerializer> itemSerializers)
4444
{
4545
var itemSerializersArray = itemSerializers.ToArray();
4646
foreach (var itemSerializer in itemSerializersArray)
@@ -57,10 +57,10 @@ public FixedSizeArraySerializer(IEnumerable<IBsonSerializer> itemSerializers)
5757
public override TItem[] Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
5858
{
5959
var reader = context.Reader;
60-
var array = new TItem[_itemSerializers.Count];
6160

6261
reader.ReadStartArray();
6362
var i = 0;
63+
var array = new TItem[_itemSerializers.Count];
6464
while (reader.ReadBsonType() != BsonType.EndOfDocument)
6565
{
6666
if (i < array.Length)
@@ -78,7 +78,7 @@ public override TItem[] Deserialize(BsonDeserializationContext context, BsonDese
7878
return array;
7979
}
8080

81-
IBsonSerializer IFixedSizeArraySerializer.GetItemSerializer(int index) => _itemSerializers[index];
81+
IBsonSerializer IPolymorphicArraySerializer.GetItemSerializer(int index) => _itemSerializers[index];
8282

8383
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, TItem[] value)
8484
{

0 commit comments

Comments
 (0)