@@ -50,36 +50,28 @@ final class PojoCodecImpl<T> extends PojoCodec<T> {
5050 private final CodecRegistry registry ;
5151 private final PropertyCodecRegistry propertyCodecRegistry ;
5252 private final DiscriminatorLookup discriminatorLookup ;
53- private final boolean specialized ;
5453
5554 PojoCodecImpl (final ClassModel <T > classModel , final CodecRegistry codecRegistry ,
56- final List <PropertyCodecProvider > propertyCodecProviders , final DiscriminatorLookup discriminatorLookup ) {
55+ final List <PropertyCodecProvider > propertyCodecProviders , final DiscriminatorLookup discriminatorLookup ) {
5756 this .classModel = classModel ;
5857 this .registry = codecRegistry ;
5958 this .discriminatorLookup = discriminatorLookup ;
6059 this .propertyCodecRegistry = new PropertyCodecRegistryImpl (this , registry , propertyCodecProviders );
61- this .specialized = shouldSpecialize (classModel );
6260 specialize ();
6361 }
6462
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 ) {
6765 this .classModel = classModel ;
6866 this .registry = codecRegistry ;
6967 this .discriminatorLookup = discriminatorLookup ;
7068 this .propertyCodecRegistry = propertyCodecRegistry ;
71- this .specialized = specialized ;
7269 specialize ();
7370 }
7471
7572 @ SuppressWarnings ("unchecked" )
7673 @ Override
7774 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-
8375 if (areEquivalentTypes (value .getClass (), classModel .getType ())) {
8476 writer .writeStartDocument ();
8577
@@ -104,10 +96,6 @@ public void encode(final BsonWriter writer, final T value, final EncoderContext
10496 @ Override
10597 public T decode (final BsonReader reader , final DecoderContext decoderContext ) {
10698 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- }
11199 InstanceCreator <T > instanceCreator = classModel .getInstanceCreator ();
112100 decodeProperties (reader , decoderContext , instanceCreator );
113101 return instanceCreator .getInstance ();
@@ -264,15 +252,13 @@ private <S> void setPropertyValueBsonExtraElements(final InstanceCreator<T> inst
264252 }
265253
266254 private void specialize () {
267- if (specialized ) {
268- classModel .getPropertyModels ().forEach (this ::cachePropertyModelCodec );
269- }
255+ classModel .getPropertyModels ().forEach (this ::cachePropertyModelCodec );
270256 }
271257
272258 private <S > void cachePropertyModelCodec (final PropertyModel <S > propertyModel ) {
273259 if (propertyModel .getCachedCodec () == null ) {
274260 Codec <S > codec = propertyModel .getCodec () != null ? propertyModel .getCodec ()
275- : new LazyPropertyModelCodec <>(propertyModel , registry , propertyCodecRegistry , discriminatorLookup );
261+ : new LazyPropertyModelCodec <>(propertyModel , registry , propertyCodecRegistry );
276262 propertyModel .cachedCodec (codec );
277263 }
278264 }
@@ -328,21 +314,6 @@ private PropertyModel<?> getPropertyModelByWriteName(final ClassModel<T> classMo
328314 return null ;
329315 }
330316
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-
346317 @ Override
347318 DiscriminatorLookup getDiscriminatorLookup () {
348319 return discriminatorLookup ;
0 commit comments