Skip to content

Commit 56e8e1b

Browse files
robxyyrozza
authored andcommitted
Add Pojo support for the primitive type 'void'
JAVA-4209
1 parent 4be4367 commit 56e8e1b

File tree

6 files changed

+21
-4
lines changed

6 files changed

+21
-4
lines changed

bson/src/main/org/bson/codecs/pojo/PropertyMetadata.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static java.lang.reflect.Modifier.isTransient;
3434

3535
final class PropertyMetadata<T> {
36+
private static final TypeData<Void> VOID_TYPE_DATA = TypeData.builder(Void.class).build();
3637
private final String name;
3738
private final String declaringClassName;
3839
private final TypeData<T> typeData;
@@ -146,6 +147,9 @@ void setError(final String error) {
146147
}
147148

148149
public boolean isSerializable() {
150+
if (isVoidType()) {
151+
return false;
152+
}
149153
if (getter != null) {
150154
return field == null || notStaticOrTransient(field.getModifiers());
151155
} else {
@@ -154,13 +158,20 @@ public boolean isSerializable() {
154158
}
155159

156160
public boolean isDeserializable() {
161+
if (isVoidType()) {
162+
return false;
163+
}
157164
if (setter != null) {
158165
return field == null || !isFinal(field.getModifiers()) && notStaticOrTransient(field.getModifiers());
159166
} else {
160167
return field != null && !isFinal(field.getModifiers()) && isPublicAndNotStaticOrTransient(field.getModifiers());
161168
}
162169
}
163170

171+
private boolean isVoidType() {
172+
return VOID_TYPE_DATA.equals(typeData);
173+
}
174+
164175
private boolean notStaticOrTransient(final int modifiers) {
165176
return !(isTransient(modifiers) || isStatic(modifiers));
166177
}

bson/src/main/org/bson/codecs/pojo/TypeData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ private <S> Class<S> boxType(final Class<S> clazz) {
236236
map.put(int.class, Integer.class);
237237
map.put(long.class, Long.class);
238238
map.put(short.class, Short.class);
239+
map.put(void.class, Void.class);
239240
PRIMITIVE_CLASS_MAP = map;
240241
}
241242
}

bson/src/test/unit/org/bson/codecs/pojo/ClassModelTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ public void testSimpleWithStaticModel() {
265265
assertEquals(2, classModel.getPropertyModels().size());
266266
assertEquals(createTypeData(Integer.class), classModel.getPropertyModel("integerField").getTypeData());
267267
assertEquals(createTypeData(String.class), classModel.getPropertyModel("stringField").getTypeData());
268+
268269
}
269270

270271
<T> TypeData.Builder<T> createBuilder(final Class<T> clazz, final Class<?>... types) {

bson/src/test/unit/org/bson/codecs/pojo/PojoRoundTripTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.bson.codecs.pojo.entities.ConcreteStandAloneAbstractInterfaceModel;
2828
import org.bson.codecs.pojo.entities.ContainsAlternativeMapAndCollectionModel;
2929
import org.bson.codecs.pojo.entities.ConventionModel;
30+
import org.bson.codecs.pojo.entities.DuplicateAnnotationAllowedModel;
3031
import org.bson.codecs.pojo.entities.FieldAndPropertyTypeMismatchModel;
3132
import org.bson.codecs.pojo.entities.GenericHolderModel;
3233
import org.bson.codecs.pojo.entities.GenericTreeModel;
@@ -79,6 +80,7 @@
7980
import org.bson.codecs.pojo.entities.conventions.BsonIgnoreDuplicatePropertyMultipleTypes;
8081
import org.bson.codecs.pojo.entities.conventions.BsonIgnoreInvalidMapModel;
8182
import org.bson.codecs.pojo.entities.conventions.BsonIgnoreSyntheticProperty;
83+
import org.bson.codecs.pojo.entities.conventions.BsonRepresentationModel;
8284
import org.bson.codecs.pojo.entities.conventions.CollectionDiscriminatorAbstractClassesModel;
8385
import org.bson.codecs.pojo.entities.conventions.CollectionDiscriminatorInterfacesModel;
8486
import org.bson.codecs.pojo.entities.conventions.CreatorAllFinalFieldsModel;
@@ -91,14 +93,12 @@
9193
import org.bson.codecs.pojo.entities.conventions.CreatorMethodModel;
9294
import org.bson.codecs.pojo.entities.conventions.CreatorNoArgsConstructorModel;
9395
import org.bson.codecs.pojo.entities.conventions.CreatorNoArgsMethodModel;
94-
import org.bson.codecs.pojo.entities.DuplicateAnnotationAllowedModel;
9596
import org.bson.codecs.pojo.entities.conventions.InterfaceModel;
9697
import org.bson.codecs.pojo.entities.conventions.InterfaceModelImplA;
9798
import org.bson.codecs.pojo.entities.conventions.InterfaceModelImplB;
9899
import org.bson.codecs.pojo.entities.conventions.Subclass1Model;
99100
import org.bson.codecs.pojo.entities.conventions.Subclass2Model;
100101
import org.bson.codecs.pojo.entities.conventions.SuperClassModel;
101-
import org.bson.codecs.pojo.entities.conventions.BsonRepresentationModel;
102102
import org.bson.types.ObjectId;
103103
import org.junit.Test;
104104
import org.junit.runner.RunWith;
@@ -518,7 +518,6 @@ private static List<TestData> testCases() {
518518
getPojoCodecProviderBuilder(BsonRepresentationModel.class),
519519
"{'_id': {'$oid': '111111111111111111111111'}, 'age': 1}"));
520520

521-
522521
return data;
523522
}
524523

bson/src/test/unit/org/bson/codecs/pojo/PojoTestCase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.bson.codecs.EncoderContext;
3030
import org.bson.codecs.ValueCodecProvider;
3131
import org.bson.codecs.configuration.CodecRegistry;
32+
import org.bson.codecs.jsr310.Jsr310CodecProvider;
3233
import org.bson.codecs.pojo.entities.CollectionNestedPojoModel;
3334
import org.bson.codecs.pojo.entities.ConcreteCollectionsModel;
3435
import org.bson.codecs.pojo.entities.ConventionModel;
@@ -222,7 +223,7 @@ PojoCodecProvider.Builder getPojoCodecProviderBuilder(final ClassModelBuilder<?>
222223
}
223224

224225
CodecRegistry getCodecRegistry(final PojoCodecProvider.Builder builder) {
225-
return fromProviders(new BsonValueCodecProvider(), new ValueCodecProvider(), builder.build());
226+
return fromProviders(new BsonValueCodecProvider(), new ValueCodecProvider(), new Jsr310CodecProvider(), builder.build());
226227
}
227228

228229
static SimpleModel getSimpleModel() {

bson/src/test/unit/org/bson/codecs/pojo/entities/SimpleWithStaticModel.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public String getStringField() {
5050
// Mimics the static kotlin synthetic annotations field
5151
}
5252

53+
public void getStringField$Alternative() {
54+
// Non static void getter field
55+
}
56+
5357
public void setStringField(final String stringField) {
5458
this.stringField = stringField;
5559
}

0 commit comments

Comments
 (0)