@@ -50,36 +50,28 @@ final class PojoCodecImpl<T> extends PojoCodec<T> {
50
50
private final CodecRegistry registry ;
51
51
private final PropertyCodecRegistry propertyCodecRegistry ;
52
52
private final DiscriminatorLookup discriminatorLookup ;
53
- private final boolean specialized ;
54
53
55
54
PojoCodecImpl (final ClassModel <T > classModel , final CodecRegistry codecRegistry ,
56
- final List <PropertyCodecProvider > propertyCodecProviders , final DiscriminatorLookup discriminatorLookup ) {
55
+ final List <PropertyCodecProvider > propertyCodecProviders , final DiscriminatorLookup discriminatorLookup ) {
57
56
this .classModel = classModel ;
58
57
this .registry = codecRegistry ;
59
58
this .discriminatorLookup = discriminatorLookup ;
60
59
this .propertyCodecRegistry = new PropertyCodecRegistryImpl (this , registry , propertyCodecProviders );
61
- this .specialized = shouldSpecialize (classModel );
62
60
specialize ();
63
61
}
64
62
65
- PojoCodecImpl (final ClassModel <T > classModel , final CodecRegistry codecRegistry , final PropertyCodecRegistry propertyCodecRegistry ,
66
- final DiscriminatorLookup discriminatorLookup , final boolean specialized ) {
63
+ PojoCodecImpl (final ClassModel <T > classModel , final CodecRegistry codecRegistry ,
64
+ final PropertyCodecRegistry propertyCodecRegistry , final DiscriminatorLookup discriminatorLookup ) {
67
65
this .classModel = classModel ;
68
66
this .registry = codecRegistry ;
69
67
this .discriminatorLookup = discriminatorLookup ;
70
68
this .propertyCodecRegistry = propertyCodecRegistry ;
71
- this .specialized = specialized ;
72
69
specialize ();
73
70
}
74
71
75
72
@ SuppressWarnings ("unchecked" )
76
73
@ Override
77
74
public void encode (final BsonWriter writer , final T value , final EncoderContext encoderContext ) {
78
- if (!specialized ) {
79
- throw new CodecConfigurationException (format ("%s contains generic types that have not been specialised.%n"
80
- + "Top level classes with generic types are not supported by the PojoCodec." , classModel .getName ()));
81
- }
82
-
83
75
if (areEquivalentTypes (value .getClass (), classModel .getType ())) {
84
76
writer .writeStartDocument ();
85
77
@@ -104,10 +96,6 @@ public void encode(final BsonWriter writer, final T value, final EncoderContext
104
96
@ Override
105
97
public T decode (final BsonReader reader , final DecoderContext decoderContext ) {
106
98
if (decoderContext .hasCheckedDiscriminator ()) {
107
- if (!specialized ) {
108
- throw new CodecConfigurationException (format ("%s contains generic types that have not been specialised.%n"
109
- + "Top level classes with generic types are not supported by the PojoCodec." , classModel .getName ()));
110
- }
111
99
InstanceCreator <T > instanceCreator = classModel .getInstanceCreator ();
112
100
decodeProperties (reader , decoderContext , instanceCreator );
113
101
return instanceCreator .getInstance ();
@@ -264,15 +252,13 @@ private <S> void setPropertyValueBsonExtraElements(final InstanceCreator<T> inst
264
252
}
265
253
266
254
private void specialize () {
267
- if (specialized ) {
268
- classModel .getPropertyModels ().forEach (this ::cachePropertyModelCodec );
269
- }
255
+ classModel .getPropertyModels ().forEach (this ::cachePropertyModelCodec );
270
256
}
271
257
272
258
private <S > void cachePropertyModelCodec (final PropertyModel <S > propertyModel ) {
273
259
if (propertyModel .getCachedCodec () == null ) {
274
260
Codec <S > codec = propertyModel .getCodec () != null ? propertyModel .getCodec ()
275
- : new LazyPropertyModelCodec <>(propertyModel , registry , propertyCodecRegistry , discriminatorLookup );
261
+ : new LazyPropertyModelCodec <>(propertyModel , registry , propertyCodecRegistry );
276
262
propertyModel .cachedCodec (codec );
277
263
}
278
264
}
@@ -328,21 +314,6 @@ private PropertyModel<?> getPropertyModelByWriteName(final ClassModel<T> classMo
328
314
return null ;
329
315
}
330
316
331
- private static <T > boolean shouldSpecialize (final ClassModel <T > classModel ) {
332
- if (!classModel .hasTypeParameters ()) {
333
- return true ;
334
- }
335
-
336
- for (Map .Entry <String , TypeParameterMap > entry : classModel .getPropertyNameToTypeParameterMap ().entrySet ()) {
337
- TypeParameterMap typeParameterMap = entry .getValue ();
338
- PropertyModel <?> propertyModel = classModel .getPropertyModel (entry .getKey ());
339
- if (typeParameterMap .hasTypeParameters () && (propertyModel == null || propertyModel .getCodec () == null )) {
340
- return false ;
341
- }
342
- }
343
- return true ;
344
- }
345
-
346
317
@ Override
347
318
DiscriminatorLookup getDiscriminatorLookup () {
348
319
return discriminatorLookup ;
0 commit comments