Skip to content

Commit 2a6e37d

Browse files
author
rstam
committed
Merged refactoring that split IBsonSerializer into 4 interfaces (with some minor changes to comments and coding style).
1 parent ecb9f28 commit 2a6e37d

File tree

8 files changed

+88
-41
lines changed

8 files changed

+88
-41
lines changed

Bson/Serialization/IBsonIdProvider.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
1-
using System;
1+
/* Copyright 2010-2012 10gen Inc.
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
using System;
217
using System.Collections.Generic;
318
using System.Linq;
419
using System.Text;
520

621
namespace MongoDB.Bson.Serialization
722
{
823
/// <summary>
9-
/// Contract for serializers that can get and set identities.
24+
/// Contract for serializers that can get and set Id values.
1025
/// </summary>
1126
public interface IBsonIdProvider
1227
{

Bson/Serialization/IBsonItemSerializationInfoProvider.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1-
using System;
1+
/* Copyright 2010-2012 10gen Inc.
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
using System;
217
using System.Collections.Generic;
318
using System.Linq;
419
using System.Text;

Bson/Serialization/IBsonMemberSerializationInfoProvider.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1-
using System;
1+
/* Copyright 2010-2012 10gen Inc.
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
using System;
217
using System.Collections.Generic;
318
using System.Linq;
419
using System.Text;

Bson/Serialization/Options/ArraySerializationOptions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public IBsonSerializationOptions ItemSerializationOptions
7171
public override void ApplyAttribute(IBsonSerializer serializer, Attribute attribute)
7272
{
7373
EnsureNotFrozen();
74-
var itemSerializationProvider = serializer as IBsonItemSerializationInfoProvider;
75-
if (itemSerializationProvider == null)
74+
var itemSerializationInfoProvider = serializer as IBsonItemSerializationInfoProvider;
75+
if (itemSerializationInfoProvider == null)
7676
{
7777
var message = string.Format(
7878
"A serialization options attribute of type {0} cannot be used when the serializer is of type {1}.",
@@ -81,7 +81,7 @@ public override void ApplyAttribute(IBsonSerializer serializer, Attribute attrib
8181
throw new NotSupportedException(message);
8282
}
8383

84-
var itemSerializer = itemSerializationProvider.GetItemSerializationInfo().Serializer;
84+
var itemSerializer = itemSerializationInfoProvider.GetItemSerializationInfo().Serializer;
8585
if (_itemSerializationOptions == null)
8686
{
8787
var itemDefaultSerializationOptions = itemSerializer.GetDefaultSerializationOptions();

Bson/Serialization/Options/DictionarySerializationOptions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ public override void ApplyAttribute(IBsonSerializer serializer, Attribute attrib
188188
}
189189
}
190190

191-
var itemSerializationProvider = serializer as IBsonItemSerializationInfoProvider;
192-
if (itemSerializationProvider == null)
191+
var itemSerializationInfoProvider = serializer as IBsonItemSerializationInfoProvider;
192+
if (itemSerializationInfoProvider == null)
193193
{
194194
var message = string.Format(
195195
"A serialization options attribute of type {0} cannot be used when the serializer is of type {1}.",
@@ -198,7 +198,7 @@ public override void ApplyAttribute(IBsonSerializer serializer, Attribute attrib
198198
throw new NotSupportedException(message);
199199
}
200200

201-
var itemSerializer = itemSerializationProvider.GetItemSerializationInfo().Serializer;
201+
var itemSerializer = itemSerializationInfoProvider.GetItemSerializationInfo().Serializer;
202202
if (_itemSerializationOptions == null)
203203
{
204204
var itemDefaultSerializationOptions = itemSerializer.GetDefaultSerializationOptions();

BsonUnitTests/Jira/CSharp81Tests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ public void TestIdMember()
5252
var idMemberMap = classMap.IdMemberMap;
5353
Assert.AreEqual("Id", idMemberMap.MemberName);
5454

55-
var identityProvider = BsonSerializer.LookupSerializer(typeof(User)) as IBsonIdProvider;
55+
var idProvider = BsonSerializer.LookupSerializer(typeof(User)) as IBsonIdProvider;
5656
var idGenerator = BsonSerializer.LookupIdGenerator(typeof(ObjectId));
57-
identityProvider.SetDocumentId(u, idGenerator.GenerateId(null, u));
57+
idProvider.SetDocumentId(u, idGenerator.GenerateId(null, u));
5858
Assert.IsFalse(idGenerator.IsEmpty(u.Id));
5959
Assert.IsTrue(idGenerator.IsEmpty(u.FriendId));
6060

Driver/Core/MongoCollection.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,18 +1079,18 @@ public virtual IEnumerable<SafeModeResult> InsertBatch(
10791079
if (_settings.AssignIdOnInsert)
10801080
{
10811081
var serializer = BsonSerializer.LookupSerializer(document.GetType());
1082-
var identityProvider = serializer as IBsonIdProvider;
1083-
if (identityProvider != null)
1082+
var idProvider = serializer as IBsonIdProvider;
1083+
if (idProvider != null)
10841084
{
10851085
object id;
10861086
Type idNominalType;
10871087
IIdGenerator idGenerator;
1088-
if (identityProvider.GetDocumentId(document, out id, out idNominalType, out idGenerator))
1088+
if (idProvider.GetDocumentId(document, out id, out idNominalType, out idGenerator))
10891089
{
10901090
if (idGenerator != null && idGenerator.IsEmpty(id))
10911091
{
10921092
id = idGenerator.GenerateId(this, document);
1093-
identityProvider.SetDocumentId(document, id);
1093+
idProvider.SetDocumentId(document, id);
10941094
}
10951095
}
10961096
}
@@ -1356,11 +1356,11 @@ public virtual SafeModeResult Save(Type nominalType, object document, MongoInser
13561356
throw new ArgumentNullException("document");
13571357
}
13581358
var serializer = BsonSerializer.LookupSerializer(document.GetType());
1359-
var identityProvider = serializer as IBsonIdProvider;
1359+
var idProvider = serializer as IBsonIdProvider;
13601360
object id;
13611361
Type idNominalType;
13621362
IIdGenerator idGenerator;
1363-
if (identityProvider != null && identityProvider.GetDocumentId(document, out id, out idNominalType, out idGenerator))
1363+
if (idProvider != null && idProvider.GetDocumentId(document, out id, out idNominalType, out idGenerator))
13641364
{
13651365
if (id == null && idGenerator == null)
13661366
{
@@ -1370,7 +1370,7 @@ public virtual SafeModeResult Save(Type nominalType, object document, MongoInser
13701370
if (idGenerator != null && idGenerator.IsEmpty(id))
13711371
{
13721372
id = idGenerator.GenerateId(this, document);
1373-
identityProvider.SetDocumentId(document, id);
1373+
idProvider.SetDocumentId(document, id);
13741374
return Insert(nominalType, document, options);
13751375
}
13761376
else

Driver/Linq/Translators/SelectQuery.cs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -467,16 +467,16 @@ private IMongoQuery BuildContainsAllQuery(MethodCallExpression methodCallExpress
467467
var valuesExpression = arguments[1] as ConstantExpression;
468468
if (serializationInfo != null && valuesExpression != null)
469469
{
470-
var itemSerializationProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
471-
if (itemSerializationProvider == null)
470+
var itemSerializationInfoProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
471+
if (itemSerializationInfoProvider == null)
472472
{
473473
var message = string.Format(
474474
"ContainsAll cannot be run against a member whose serializer does not implement {0}. The current serializer is {1}.",
475475
BsonUtils.GetFriendlyTypeName(typeof(IBsonItemSerializationInfoProvider)),
476476
BsonUtils.GetFriendlyTypeName(serializationInfo.Serializer.GetType()));
477477
throw new NotSupportedException(message);
478478
}
479-
var itemSerializationInfo = itemSerializationProvider.GetItemSerializationInfo();
479+
var itemSerializationInfo = itemSerializationInfoProvider.GetItemSerializationInfo();
480480
var serializedValues = SerializeValues(itemSerializationInfo, (IEnumerable)valuesExpression.Value);
481481
return Query.All(serializationInfo.ElementName, serializedValues);
482482
}
@@ -496,16 +496,16 @@ private IMongoQuery BuildContainsAnyQuery(MethodCallExpression methodCallExpress
496496
var valuesExpression = arguments[1] as ConstantExpression;
497497
if (serializationInfo != null && valuesExpression != null)
498498
{
499-
var itemSerializationProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
500-
if (itemSerializationProvider == null)
499+
var itemSerializationInfoProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
500+
if (itemSerializationInfoProvider == null)
501501
{
502502
var message = string.Format(
503503
"ContainsAny cannot be run against a member whose serializer does not implement {0}. The current serializer is {1}.",
504504
BsonUtils.GetFriendlyTypeName(typeof(IBsonItemSerializationInfoProvider)),
505505
BsonUtils.GetFriendlyTypeName(serializationInfo.Serializer.GetType()));
506506
throw new NotSupportedException(message);
507507
}
508-
var itemSerializationInfo = itemSerializationProvider.GetItemSerializationInfo();
508+
var itemSerializationInfo = itemSerializationInfoProvider.GetItemSerializationInfo();
509509
var serializedValues = SerializeValues(itemSerializationInfo, (IEnumerable)valuesExpression.Value);
510510
return Query.In(serializationInfo.ElementName, serializedValues);
511511
}
@@ -543,16 +543,16 @@ private IMongoQuery BuildContainsQuery(MethodCallExpression methodCallExpression
543543

544544
if (serializationInfo != null && valueExpression != null)
545545
{
546-
var itemSerializationProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
547-
if (itemSerializationProvider == null)
546+
var itemSerializationInfoProvider = serializationInfo.Serializer as IBsonItemSerializationInfoProvider;
547+
if (itemSerializationInfoProvider == null)
548548
{
549549
var message = string.Format(
550550
"Contains cannot be run against a member whose serializer does not implement {0}. The current serializer is {1}.",
551551
BsonUtils.GetFriendlyTypeName(typeof(IBsonItemSerializationInfoProvider)),
552552
BsonUtils.GetFriendlyTypeName(serializationInfo.Serializer.GetType()));
553553
throw new NotSupportedException(message);
554554
}
555-
var itemSerializationInfo = itemSerializationProvider.GetItemSerializationInfo();
555+
var itemSerializationInfo = itemSerializationInfoProvider.GetItemSerializationInfo();
556556
var serializedValue = SerializeValue(itemSerializationInfo, valueExpression.Value);
557557
return Query.EQ(serializationInfo.ElementName, serializedValue);
558558
}
@@ -1507,16 +1507,16 @@ private BsonSerializationInfo GetSerializationInfoArrayIndex(IBsonSerializer ser
15071507
var arraySerializationInfo = GetSerializationInfo(serializer, binaryExpression.Left);
15081508
if (arraySerializationInfo != null)
15091509
{
1510-
var itemSerializationProvider = arraySerializationInfo.Serializer as IBsonItemSerializationInfoProvider;
1511-
if (itemSerializationProvider == null)
1510+
var itemSerializationInfoProvider = arraySerializationInfo.Serializer as IBsonItemSerializationInfoProvider;
1511+
if (itemSerializationInfoProvider == null)
15121512
{
15131513
var message = string.Format(
15141514
"Queries using an array index cannot be run against a member whose serializer does not implement {0}. The current serializer is {1}.",
15151515
BsonUtils.GetFriendlyTypeName(typeof(IBsonItemSerializationInfoProvider)),
15161516
BsonUtils.GetFriendlyTypeName(arraySerializationInfo.Serializer.GetType()));
15171517
throw new NotSupportedException(message);
15181518
}
1519-
var itemSerializationInfo = itemSerializationProvider.GetItemSerializationInfo();
1519+
var itemSerializationInfo = itemSerializationInfoProvider.GetItemSerializationInfo();
15201520
var indexEpression = binaryExpression.Right as ConstantExpression;
15211521
if (indexEpression != null)
15221522
{
@@ -1539,16 +1539,18 @@ private BsonSerializationInfo GetSerializationInfoGetItem(IBsonSerializer serial
15391539
{
15401540
var indexEpression = arguments[0] as ConstantExpression;
15411541
if (indexEpression == null)
1542+
{
15421543
return null;
1544+
}
1545+
var index = Convert.ToInt32(indexEpression.Value);
15431546

15441547
var arraySerializationInfo = GetSerializationInfo(serializer, methodCallExpression.Object);
15451548
if (arraySerializationInfo != null)
15461549
{
1547-
var itemSerializationProvider = arraySerializationInfo.Serializer as IBsonItemSerializationInfoProvider;
1548-
if (itemSerializationProvider != null)
1550+
var itemSerializationInfoProvider = arraySerializationInfo.Serializer as IBsonItemSerializationInfoProvider;
1551+
if (itemSerializationInfoProvider != null)
15491552
{
1550-
var itemSerializationInfo = itemSerializationProvider.GetItemSerializationInfo();
1551-
var index = Convert.ToInt32(indexEpression.Value);
1553+
var itemSerializationInfo = itemSerializationInfoProvider.GetItemSerializationInfo();
15521554
return new BsonSerializationInfo(
15531555
arraySerializationInfo.ElementName + "." + index.ToString(),
15541556
itemSerializationInfo.Serializer,
@@ -1569,10 +1571,10 @@ private BsonSerializationInfo GetSerializationInfoMember(IBsonSerializer seriali
15691571
var containingExpression = memberExpression.Expression;
15701572
if (containingExpression.NodeType == ExpressionType.Parameter)
15711573
{
1572-
var memberInfoProvider = serializer as IBsonMemberSerializationInfoProvider;
1573-
if(memberInfoProvider != null)
1574+
var memberSerializationInfoProvider = serializer as IBsonMemberSerializationInfoProvider;
1575+
if (memberSerializationInfoProvider != null)
15741576
{
1575-
return memberInfoProvider.GetMemberSerializationInfo(memberName);
1577+
return memberSerializationInfoProvider.GetMemberSerializationInfo(memberName);
15761578
}
15771579
else
15781580
{
@@ -1583,10 +1585,10 @@ private BsonSerializationInfo GetSerializationInfoMember(IBsonSerializer seriali
15831585
else
15841586
{
15851587
var containingSerializationInfo = GetSerializationInfo(serializer, containingExpression);
1586-
var memberInfoProvider = containingSerializationInfo.Serializer as IBsonMemberSerializationInfoProvider;
1587-
if(memberInfoProvider != null)
1588+
var memberSerializationInfoProvider = containingSerializationInfo.Serializer as IBsonMemberSerializationInfoProvider;
1589+
if (memberSerializationInfoProvider != null)
15881590
{
1589-
var memberSerializationInfo = memberInfoProvider.GetMemberSerializationInfo(memberName);
1591+
var memberSerializationInfo = memberSerializationInfoProvider.GetMemberSerializationInfo(memberName);
15901592
return new BsonSerializationInfo(
15911593
containingSerializationInfo.ElementName + "." + memberSerializationInfo.ElementName,
15921594
memberSerializationInfo.Serializer,

0 commit comments

Comments
 (0)