Skip to content

Commit e0aa2b3

Browse files
Flex: support Java Byte and Short.
1 parent ff83f13 commit e0aa2b3

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

objectbox-java/src/main/java/io/objectbox/converter/FlexObjectConverter.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ private void addValue(FlexBuffersBuilder builder, Object value) {
7373
builder.putString((String) value);
7474
} else if (value instanceof Boolean) {
7575
builder.putBoolean((Boolean) value);
76+
} else if (value instanceof Byte) {
77+
// Will always be restored as Integer.
78+
builder.putInt(((Byte) value).intValue());
79+
} else if (value instanceof Short) {
80+
// Will always be restored as Integer.
81+
builder.putInt(((Short) value).intValue());
7682
} else if (value instanceof Integer) {
7783
builder.putInt((Integer) value);
7884
} else if (value instanceof Long) {
@@ -119,6 +125,12 @@ private void addMap(FlexBuffersBuilder builder, String mapKey, Map<Object, Objec
119125
builder.putString(key, (String) value);
120126
} else if (value instanceof Boolean) {
121127
builder.putBoolean(key, (Boolean) value);
128+
} else if (value instanceof Byte) {
129+
// Will always be restored as Integer.
130+
builder.putInt(key, ((Byte) value).intValue());
131+
} else if (value instanceof Short) {
132+
// Will always be restored as Integer.
133+
builder.putInt(key, ((Short) value).intValue());
122134
} else if (value instanceof Integer) {
123135
builder.putInt(key, (Integer) value);
124136
} else if (value instanceof Long) {
@@ -155,6 +167,12 @@ private void addVector(FlexBuffersBuilder builder, String vectorKey, List<Object
155167
builder.putString((String) item);
156168
} else if (item instanceof Boolean) {
157169
builder.putBoolean((Boolean) item);
170+
} else if (item instanceof Byte) {
171+
// Will always be restored as Integer.
172+
builder.putInt(((Byte) item).intValue());
173+
} else if (item instanceof Short) {
174+
// Will always be restored as Integer.
175+
builder.putInt(((Short) item).intValue());
158176
} else if (item instanceof Integer) {
159177
builder.putInt((Integer) item);
160178
} else if (item instanceof Long) {

tests/objectbox-java-test/src/test/java/io/objectbox/converter/FlexMapConverterTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,17 @@ public void keysString_valsSupportedTypes_works() {
3131

3232
map.put("string", "Grüezi");
3333
map.put("boolean", true);
34+
map.put("byte", (byte) 1);
35+
map.put("short", (short) 1);
36+
map.put("int", 1);
3437
map.put("long", 1L);
3538
map.put("float", 1.3f);
3639
map.put("double", -1.4d);
3740
Map<String, Object> restoredMap = convertAndBack(map, converter);
41+
// Java integers are returned as Long if one value is larger than 32 bits, so expect Long.
42+
map.put("byte", 1L);
43+
map.put("short", 1L);
44+
map.put("int", 1L);
3845
// Java float is returned as double, so expect double.
3946
map.put("float", (double) 1.3f);
4047
assertEquals(map, restoredMap);

tests/objectbox-java-test/src/test/java/io/objectbox/converter/FlexObjectConverterTest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import org.junit.Test;
44

55
import javax.annotation.Nullable;
6-
import java.util.HashMap;
76
import java.util.LinkedList;
87
import java.util.List;
9-
import java.util.Map;
108

119
import static org.junit.Assert.assertEquals;
1210
import static org.junit.Assert.assertThrows;
@@ -25,9 +23,15 @@ public void supportedBasicTypes_works() {
2523

2624
convertAndBackThenAssert("Grüezi", converter);
2725
convertAndBackThenAssert(true, converter);
28-
// Java Long is returned as Integer if it fits, so expect Integer.
26+
// Java integers are returned as Integer if no value is larger than 32 bits, so expect Integer.
27+
Object restoredByte = convertAndBack((byte) 1, converter);
28+
assertEquals(1, restoredByte);
29+
Object restoredShort = convertAndBack((short) 1, converter);
30+
assertEquals(1, restoredShort);
31+
Object restoredInteger = convertAndBack(1, converter);
32+
assertEquals(1, restoredInteger);
2933
Object restoredLong = convertAndBack(1L, converter);
30-
assertEquals((int) 1L, restoredLong);
34+
assertEquals(1, restoredLong);
3135
// Java Float is returned as Double, so expect Double.
3236
Object restoredFloat = convertAndBack(1.3f, converter);
3337
assertEquals((double) 1.3f, restoredFloat);
@@ -45,12 +49,19 @@ public void list_works() {
4549
// list with supported types
4650
list.add("Grüezi");
4751
list.add(true);
52+
list.add((byte) 1);
53+
list.add((short) 1);
54+
list.add(1);
4855
list.add(-2L);
4956
list.add(1.3f);
5057
list.add(-1.4d);
5158
List<Object> restoredList = convertAndBack(list, converter);
59+
// Java integers are returned as Long as one element is larger than 32 bits, so expect Long.
60+
list.set(2, 1L);
61+
list.set(3, 1L);
62+
list.set(4, 1L);
5263
// Java Float is returned as Double, so expect Double.
53-
list.set(3, (double) 1.3f);
64+
list.set(6, (double) 1.3f);
5465
assertEquals(list, restoredList);
5566

5667
// list with null element

0 commit comments

Comments
 (0)