Skip to content

Commit 2c7d0d1

Browse files
moves the duplicate discriminator keys check in ConventionAnnotationImpl
1 parent 6d40590 commit 2c7d0d1

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

Diff for: bson/src/main/org/bson/codecs/pojo/ConventionAnnotationImpl.java

+13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.bson.codecs.pojo.annotations.BsonIgnore;
2626
import org.bson.codecs.pojo.annotations.BsonProperty;
2727
import org.bson.codecs.pojo.annotations.BsonRepresentation;
28+
import org.bson.diagnostics.Logger;
29+
import org.bson.diagnostics.Loggers;
2830

2931
import java.lang.annotation.Annotation;
3032
import java.lang.reflect.Constructor;
@@ -41,6 +43,8 @@
4143

4244
final class ConventionAnnotationImpl implements Convention {
4345

46+
private static final Logger LOGGER = Loggers.getLogger("ConventionAnnotation");
47+
4448
@Override
4549
public void apply(final ClassModelBuilder<?> classModelBuilder) {
4650
for (final Annotation annotation : classModelBuilder.getAnnotations()) {
@@ -240,6 +244,15 @@ private void cleanPropertyBuilders(final ClassModelBuilder<?> classModelBuilder)
240244
if (!propertyModelBuilder.isReadable() && !propertyModelBuilder.isWritable()) {
241245
propertiesToRemove.add(propertyModelBuilder.getName());
242246
}
247+
if (classModelBuilder.useDiscriminator() && propertyModelBuilder.getReadName().equals(classModelBuilder.getDiscriminatorKey())) {
248+
propertiesToRemove.add(propertyModelBuilder.getName());
249+
LOGGER.warn(
250+
format(
251+
"Removed the property '%s' from the model because the discriminator has the same key",
252+
classModelBuilder.getDiscriminatorKey()
253+
)
254+
);
255+
}
243256
}
244257
for (String propertyName : propertiesToRemove) {
245258
classModelBuilder.removeProperty(propertyName);

Diff for: bson/src/main/org/bson/codecs/pojo/PojoCodecImpl.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void encode(final BsonWriter writer, final T value, final EncoderContext
7979
encodeDiscriminatorProperty(writer);
8080

8181
for (PropertyModel<?> propertyModel : classModel.getPropertyModels()) {
82-
if (idProperty(propertyModel) || discriminatorProperty(propertyModel)) {
82+
if (idProperty(propertyModel)) {
8383
continue;
8484
}
8585
encodeProperty(writer, value, encoderContext, propertyModel);
@@ -147,13 +147,6 @@ private void encodeDiscriminatorProperty(final BsonWriter writer) {
147147
}
148148
}
149149

150-
private boolean discriminatorProperty(final PropertyModel<?> propertyModel) {
151-
if (classModel.useDiscriminator()) {
152-
return propertyModel.getReadName().equals(classModel.getDiscriminatorKey());
153-
}
154-
return false;
155-
}
156-
157150
private <S> void encodeProperty(final BsonWriter writer, final T instance, final EncoderContext encoderContext,
158151
final PropertyModel<S> propertyModel) {
159152
if (propertyModel != null && propertyModel.isReadable()) {

Diff for: bson/src/main/org/bson/codecs/pojo/PojoCodecProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private <T> PojoCodec<T> createCodec(final Class<T> clazz, final CodecRegistry r
8080
} else if (automatic || (clazz.getPackage() != null && packages.contains(clazz.getPackage().getName()))) {
8181
try {
8282
classModel = createClassModel(clazz, conventions);
83-
if (clazz.isInterface() || !classModel.getPropertyModels().isEmpty()) {
83+
if (clazz.isInterface() || !classModel.getPropertyModels().isEmpty() || classModel.useDiscriminator()) {
8484
discriminatorLookup.addClassModel(classModel);
8585
return new AutomaticPojoCodec<>(createCodec(classModel, registry, propertyCodecProviders,
8686
discriminatorLookup));

0 commit comments

Comments
 (0)