Skip to content

Commit 3ea1228

Browse files
committed
Merged IBsonSerializationDomainInternal into IBsonSerializationDomain and created GetDiscriminatorsForTypeAndSubTypesInternal.
1 parent 792d835 commit 3ea1228

15 files changed

+65
-32
lines changed

src/MongoDB.Bson/InternalExtensions.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020

2121
namespace MongoDB.Bson
2222
{
23-
//FP This could be moved somewhere else
23+
//FP This could be moved somewhere else, and maybe reordered.
2424
internal static class InternalExtensions
2525
{
26+
#region IDiscriminatorConvention
27+
2628
public static Type GetActualTypeInternal(this IDiscriminatorConvention discriminatorConvention, IBsonReader bsonReader, Type nominalType, IBsonSerializationDomain serializationDomain)
2729
{
2830
if (discriminatorConvention is IDiscriminatorConventionInternal internalConvention)
@@ -41,6 +43,23 @@ public static BsonValue GetDiscriminatorInternal(this IDiscriminatorConvention d
4143
return discriminatorConvention.GetDiscriminator(nominalType, actualType);
4244
}
4345

46+
#endregion
47+
48+
#region IScalarDiscriminatorConvention
49+
50+
public static BsonValue[] GetDiscriminatorsForTypeAndSubTypesInternal(this IScalarDiscriminatorConvention discriminatorConvention, Type type, IBsonSerializationDomain serializationDomain)
51+
{
52+
if (discriminatorConvention is IScalarDiscriminatorConventionInternal internalConvention)
53+
{
54+
return internalConvention.GetDiscriminatorsForTypeAndSubTypes(type, serializationDomain);
55+
}
56+
return discriminatorConvention.GetDiscriminatorsForTypeAndSubTypes(type);
57+
}
58+
59+
#endregion
60+
61+
#region IMemberMapConvention
62+
4463
public static void ApplyInternal(this IMemberMapConvention memberMapConvention, BsonMemberMap memberMap, IBsonSerializationDomain serializationDomain)
4564
{
4665
if (memberMapConvention is IMemberMapConventionInternal internalConvention)
@@ -53,6 +72,10 @@ public static void ApplyInternal(this IMemberMapConvention memberMapConvention,
5372
}
5473
}
5574

75+
#endregion
76+
77+
#region IPostProcessingConvention
78+
5679
public static void PostProcessInternal(this IPostProcessingConvention postProcessingConvention, BsonClassMap classMap, IBsonSerializationDomain serializationDomain)
5780
{
5881
if (postProcessingConvention is IPostProcessingConventionInternal internalConvention)
@@ -64,5 +87,7 @@ public static void PostProcessInternal(this IPostProcessingConvention postProces
6487
postProcessingConvention.PostProcess(classMap);
6588
}
6689
}
90+
91+
#endregion
6792
}
6893
}

src/MongoDB.Bson/Serialization/BsonClassMap.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -415,16 +415,16 @@ internal class FreezeContext
415415
{
416416
public int FreezeNestingLevel { get; set; } = 0;
417417
public Queue<Type> KnownTypesQueue { get; set; } = new();
418-
public IBsonSerializationDomainInternal SerializationDomain { get; set; }
418+
public IBsonSerializationDomain SerializationDomain { get; set; }
419419
}
420420

421421
/// <summary>
422422
/// Freezes the class map.
423423
/// </summary>
424424
/// <returns>The frozen class map.</returns>
425-
public BsonClassMap Freeze() => Freeze(BsonSerializer.DefaultSerializationDomain as IBsonSerializationDomainInternal);
425+
public BsonClassMap Freeze() => Freeze(BsonSerializer.DefaultSerializationDomain);
426426

427-
internal BsonClassMap Freeze(IBsonSerializationDomainInternal domain)
427+
internal BsonClassMap Freeze(IBsonSerializationDomain domain)
428428
{
429429
var freezeContext = new FreezeContext { SerializationDomain = domain };
430430
return Freeze(freezeContext);
@@ -1171,7 +1171,7 @@ public void UnmapProperty(string propertyName)
11711171
/// Gets the discriminator convention for the class.
11721172
/// </summary>
11731173
/// <returns>The discriminator convention for the class.</returns>
1174-
internal IDiscriminatorConvention GetDiscriminatorConvention(IBsonSerializationDomainInternal serializationDomain)
1174+
internal IDiscriminatorConvention GetDiscriminatorConvention(IBsonSerializationDomain serializationDomain)
11751175
{
11761176
// return a cached discriminator convention when possible
11771177
var discriminatorConvention = _discriminatorConvention;
@@ -1218,7 +1218,7 @@ IDiscriminatorConvention LookupDiscriminatorConvention()
12181218
/// </summary>
12191219
/// <returns>The discriminator convention for the class.</returns>
12201220
internal IDiscriminatorConvention GetDiscriminatorConvention()
1221-
=> GetDiscriminatorConvention(BsonSerializer.DefaultSerializationDomain as IBsonSerializationDomainInternal);
1221+
=> GetDiscriminatorConvention(BsonSerializer.DefaultSerializationDomain);
12221222

12231223
// private methods
12241224
private void AutoMapClass(IBsonSerializationDomain serializationDomain)

src/MongoDB.Bson/Serialization/BsonClassMapDomain.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace MongoDB.Bson.Serialization;
88
internal class BsonClassMapDomain : IBsonClassMapDomain
99
{
1010
// private fields
11-
private readonly IBsonSerializationDomainInternal _serializationDomain;
11+
private readonly IBsonSerializationDomain _serializationDomain;
1212
private readonly Dictionary<Type, BsonClassMap> _classMaps = new();
1313

1414
public BsonClassMapDomain(BsonSerializationDomain serializationDomain)

src/MongoDB.Bson/Serialization/BsonSerializationDomain.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace MongoDB.Bson.Serialization
1515
/// <summary>
1616
/// A class that represents the BSON serialization functionality.
1717
/// </summary>
18-
internal class BsonSerializationDomain : IBsonSerializationDomainInternal, IDisposable
18+
internal class BsonSerializationDomain : IBsonSerializationDomain, IDisposable
1919
{
2020
// private fields
2121
private IBsonDefaults _bsonDefaults;

src/MongoDB.Bson/Serialization/BsonSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace MongoDB.Bson.Serialization
2626
/// </summary>
2727
public static class BsonSerializer
2828
{
29-
private static readonly IBsonSerializationDomainInternal _serializationDomain;
29+
private static readonly IBsonSerializationDomain _serializationDomain;
3030

3131
// static constructor
3232
static BsonSerializer()

src/MongoDB.Bson/Serialization/Conventions/IScalarDiscriminatorConvention.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public interface IScalarDiscriminatorConvention : IDiscriminatorConvention
2727
/// </summary>
2828
/// <param name="type">The type.</param>
2929
/// <returns>The discriminators.</returns>
30-
BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type); //FP Need to fix this....
30+
BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type);
31+
}
32+
33+
internal interface IScalarDiscriminatorConventionInternal : IScalarDiscriminatorConvention
34+
{
35+
BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type, IBsonSerializationDomain serializationDomain);
3136
}
3237
}

src/MongoDB.Bson/Serialization/Conventions/ScalarDiscriminatorConvention.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace MongoDB.Bson.Serialization.Conventions
2222
/// <summary>
2323
/// Represents a discriminator convention where the discriminator is provided by the class map of the actual type.
2424
/// </summary>
25-
public class ScalarDiscriminatorConvention : StandardDiscriminatorConvention, IScalarDiscriminatorConvention, IDiscriminatorConventionInternal
25+
public class ScalarDiscriminatorConvention : StandardDiscriminatorConvention, IScalarDiscriminatorConventionInternal, IDiscriminatorConventionInternal
2626
{
2727
private readonly ConcurrentDictionary<Type, BsonValue[]> _cachedTypeAndSubTypeDiscriminators = new();
2828

@@ -67,9 +67,12 @@ BsonValue IDiscriminatorConventionInternal.GetDiscriminator(Type nominalType, Ty
6767
}
6868

6969
/// <inheritdoc/>
70-
public BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type)
70+
public BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type) =>
71+
(this as IScalarDiscriminatorConventionInternal).GetDiscriminatorsForTypeAndSubTypes(type, BsonSerializer.DefaultSerializationDomain);
72+
73+
BsonValue[] IScalarDiscriminatorConventionInternal.GetDiscriminatorsForTypeAndSubTypes(Type type, IBsonSerializationDomain serializationDomain)
7174
{
72-
return _cachedTypeAndSubTypeDiscriminators.GetOrAdd(type, BsonSerializer.GetDiscriminatorsForTypeAndSubTypes);
75+
return _cachedTypeAndSubTypeDiscriminators.GetOrAdd(type, serializationDomain.GetDiscriminatorsForTypeAndSubTypes);
7376
}
7477
}
7578
}

src/MongoDB.Bson/Serialization/Conventions/StandardDiscriminatorConvention.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ internal Type GetActualType(IBsonReader bsonReader, Type nominalType, IBsonSeria
104104
if (bsonType == BsonType.Document)
105105
{
106106
// ensure KnownTypes of nominalType are registered (so IsTypeDiscriminated returns correct answer)
107-
(domain as IBsonSerializationDomainInternal)!.EnsureKnownTypesAreRegistered(nominalType); //TODO Should we move Ensure... to the public interface?
107+
domain.EnsureKnownTypesAreRegistered(nominalType);
108108

109109
// we can skip looking for a discriminator if nominalType has no discriminated sub types
110110
if (domain.IsTypeDiscriminated(nominalType))

src/MongoDB.Bson/Serialization/IBsonSerializationDomain.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,9 @@ void Serialize(
298298
/// //TODO
299299
/// </summary>
300300
IBsonDefaults BsonDefaults { get; }
301-
}
302301

303-
internal interface IBsonSerializationDomainInternal : IBsonSerializationDomain
304-
{
302+
//DOMAIN-API The following methods and properties were not public on BsonSerializer
303+
305304
void EnsureKnownTypesAreRegistered(Type nominalType);
306305

307306
BsonValue[] GetDiscriminatorsForTypeAndSubTypes(Type type);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public override TClass Deserialize(BsonDeserializationContext context, BsonDeser
8888
return default(TClass);
8989
}
9090

91-
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain as IBsonSerializationDomainInternal);
91+
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain);
9292

9393
var actualType = discriminatorConvention.GetActualTypeInternal(bsonReader, args.NominalType, context.SerializationDomain);
9494

@@ -147,7 +147,7 @@ public TClass DeserializeClass(BsonDeserializationContext context)
147147
}
148148
}
149149

150-
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain as IBsonSerializationDomainInternal);
150+
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain);
151151
var allMemberMaps = _classMap.AllMemberMaps;
152152
var extraElementsMemberMapIndex = _classMap.ExtraElementsMemberMapIndex;
153153
var memberMapBitArray = FastMemberMapHelper.GetBitArray(allMemberMaps.Count);
@@ -642,7 +642,7 @@ private void SerializeExtraElements(BsonSerializationContext context, object obj
642642

643643
private void SerializeDiscriminator(BsonSerializationContext context, Type nominalType, object obj)
644644
{
645-
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain as IBsonSerializationDomainInternal);
645+
var discriminatorConvention = _classMap.GetDiscriminatorConvention(context.SerializationDomain);
646646
if (discriminatorConvention != null)
647647
{
648648
var actualType = obj.GetType();

0 commit comments

Comments
 (0)