From e60e49e0ecb6e1f0457ba09b4f325ba4032448c9 Mon Sep 17 00:00:00 2001 From: Glicz <67753196+GliczDev@users.noreply.github.com> Date: Fri, 11 Jul 2025 02:56:30 +0200 Subject: [PATCH 1/2] Fix type parameters not being passed to fallback property codec --- .../org/bson/codecs/pojo/FallbackPropertyCodecProvider.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java b/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java index 8c5fd4e9cf3..810fd333ba9 100644 --- a/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java +++ b/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java @@ -19,6 +19,8 @@ import org.bson.codecs.Codec; import org.bson.codecs.configuration.CodecRegistry; +import java.lang.reflect.Type; + final class FallbackPropertyCodecProvider implements PropertyCodecProvider { private final CodecRegistry codecRegistry; private final PojoCodec pojoCodec; @@ -35,6 +37,6 @@ public Codec get(final TypeWithTypeParameters type, final PropertyCode if (clazz == pojoCodec.getEncoderClass()) { return (Codec) pojoCodec; } - return codecRegistry.get(type.getType()); + return codecRegistry.get(type.getType(), type.getTypeParameters().stream().map(TypeWithTypeParameters::getType).toList()); } } From dd532f2217a283b8c344c361b115aa61cb272ccb Mon Sep 17 00:00:00 2001 From: GliczDev <67753196+GliczDev@users.noreply.github.com> Date: Sun, 2 Nov 2025 10:17:16 +0100 Subject: [PATCH 2/2] Resolve some of requested changes --- .../pojo/FallbackPropertyCodecProvider.java | 8 +++++++- .../pojo/PojoCodecCyclicalLookupTest.java | 18 +++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java b/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java index 810fd333ba9..1084dbf0eb2 100644 --- a/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java +++ b/bson/src/main/org/bson/codecs/pojo/FallbackPropertyCodecProvider.java @@ -20,6 +20,8 @@ import org.bson.codecs.configuration.CodecRegistry; import java.lang.reflect.Type; +import java.util.List; +import java.util.stream.Collectors; final class FallbackPropertyCodecProvider implements PropertyCodecProvider { private final CodecRegistry codecRegistry; @@ -37,6 +39,10 @@ public Codec get(final TypeWithTypeParameters type, final PropertyCode if (clazz == pojoCodec.getEncoderClass()) { return (Codec) pojoCodec; } - return codecRegistry.get(type.getType(), type.getTypeParameters().stream().map(TypeWithTypeParameters::getType).toList()); + List types = type.getTypeParameters().stream().map(TypeWithTypeParameters::getType).collect(Collectors.toList()); + if (!types.isEmpty()) { + return codecRegistry.get(type.getType(), types); + } + return codecRegistry.get(type.getType()); } } diff --git a/bson/src/test/unit/org/bson/codecs/pojo/PojoCodecCyclicalLookupTest.java b/bson/src/test/unit/org/bson/codecs/pojo/PojoCodecCyclicalLookupTest.java index 161a54fd902..0d1ad79df96 100644 --- a/bson/src/test/unit/org/bson/codecs/pojo/PojoCodecCyclicalLookupTest.java +++ b/bson/src/test/unit/org/bson/codecs/pojo/PojoCodecCyclicalLookupTest.java @@ -31,6 +31,7 @@ import org.bson.codecs.pojo.entities.SimpleModel; import org.junit.jupiter.api.Test; +import java.lang.reflect.Type; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -136,9 +137,19 @@ static class LookupCountingCodecRegistry implements CodecRegistry { @Override public Codec get(final Class clazz) { + return get(clazz, this); + } + + @Override + public Codec get(final Class clazz, final List typeArguments) { + return get(clazz, typeArguments, this); + } + + @Override + public Codec get(final Class clazz, final CodecRegistry registry) { incrementCount(clazz); for (CodecProvider provider : codecProviders) { - Codec codec = provider.get(clazz, this); + Codec codec = provider.get(clazz, registry); if (codec != null) { return codec; } @@ -146,10 +157,11 @@ public Codec get(final Class clazz) { return null; } - public Codec get(final Class clazz, final CodecRegistry registry) { + @Override + public Codec get(final Class clazz, final List typeArguments, final CodecRegistry registry) { incrementCount(clazz); for (CodecProvider provider : codecProviders) { - Codec codec = provider.get(clazz, registry); + Codec codec = provider.get(clazz, typeArguments, registry); if (codec != null) { return codec; }