Skip to content

Commit

Permalink
Took care of review comments
Browse files Browse the repository at this point in the history
Signed-off-by: ABHIJEET SHUKLA <abhijeet.shukla@sap.com>
  • Loading branch information
ABHIJEET SHUKLA committed Jan 28, 2021
1 parent 78a4064 commit 0ecbedb
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 89 deletions.
Expand Up @@ -979,87 +979,14 @@ public static <T> Map<String, T> mapAnyType(Object... entries) {

private static Map<String, Object> fromJsonString(String json) {
Type type = new TypeToken<Map<String, Object>>() {}.getType();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapterFactory(CustomObjectTypeAdapter.FACTORY);
Gson gson = gsonBuilder.create();
Gson gson = new Gson();
return gson.fromJson(json, type);
}

public static Map<String, Object> fromSingleQuotedString(String json) {
return fromJsonString(json.replace("'", "\""));
}

static class CustomObjectTypeAdapter extends TypeAdapter<Object> {
public static final TypeAdapterFactory FACTORY =
new TypeAdapterFactory() {
@SuppressWarnings("unchecked")
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
if (Map.class.isAssignableFrom(type.getRawType())) {
return (TypeAdapter<T>) new CustomObjectTypeAdapter();
}
return null;
}
};

private final TypeAdapter<Object> delegate = new Gson().getAdapter(Object.class);

@Override
public Object read(JsonReader in) throws IOException {
JsonToken token = in.peek();
switch (token) {
case BEGIN_ARRAY:
List<Object> list = new ArrayList<Object>();
in.beginArray();
while (in.hasNext()) {
list.add(read(in));
}
in.endArray();
return list;

case BEGIN_OBJECT:
Map<String, Object> map = new LinkedTreeMap<String, Object>();
in.beginObject();
while (in.hasNext()) {
map.put(in.nextName(), read(in));
}
in.endObject();
return map;

case STRING:
return in.nextString();

case NUMBER:
String validNumber = in.nextString();
try {
return Integer.parseInt(validNumber);
} catch (NumberFormatException nfe) {
try {
return Long.parseLong(validNumber);
} catch (NumberFormatException nfe2) {
return Double.parseDouble(validNumber);
}
}

case BOOLEAN:
return in.nextBoolean();

case NULL:
in.nextNull();
return null;

default:
throw new IllegalStateException();
}
}

@SuppressWarnings("unchecked")
@Override
public void write(JsonWriter out, Object value) throws IOException {
delegate.write(out, value);
}
}

public static String fullPath(DocumentReference ref, FirestoreOptions options) {
return ResourcePath.create(
DatabaseRootName.of(options.getProjectId(), options.getDatabaseId()),
Expand Down
Expand Up @@ -898,10 +898,10 @@ public void setOverrideValue(String value) {
// Conflicting setters are not supported. When inheriting from a base class we require all
// setters be an override of a base class
private static class ConflictingSetterBean {
public int value;
public double value;

// package private so override can be public
void setValue(int value) {
void setValue(double value) {
this.value = value;
}
}
Expand All @@ -920,7 +920,7 @@ public void setValue(Integer value) {

private static class NonConflictingSetterSubBean extends ConflictingSetterBean {
@Override
public void setValue(int value) {
public void setValue(double value) {
this.value = value * -1;
}
}
Expand Down Expand Up @@ -1088,14 +1088,14 @@ public void primitiveDeserializeDouble() {
@Test
public void primitiveDeserializeBigDecimal() {
BigDecimalBean beanBigdecimal = deserialize("{'value': 123}", BigDecimalBean.class);
assertEquals(BigDecimal.valueOf(123), beanBigdecimal.value);
assertEquals(BigDecimal.valueOf(123.0), beanBigdecimal.value);

beanBigdecimal = deserialize("{'value': '123'}", BigDecimalBean.class);
assertEquals(BigDecimal.valueOf(123), beanBigdecimal.value);

// Int
BigDecimalBean beanInt = deserialize("{'value': 1}", BigDecimalBean.class);
assertEquals(BigDecimal.valueOf(1), beanInt.value);
assertEquals(BigDecimal.valueOf(1.0), beanInt.value);

// Long
BigDecimalBean beanLong = deserialize("{'value': 1234567890123}", BigDecimalBean.class);
Expand Down Expand Up @@ -1570,16 +1570,16 @@ public void serializeDoubleBean() {

@Test
public void serializeIntBean() {
IntBean bean = new IntBean();
bean.value = 1;
DoubleBean bean = new DoubleBean();
bean.value = 1.0;
assertJson("{'value': 1}", serialize(bean));
}

@Test
public void serializeLongBean() {
LongBean bean = new LongBean();
bean.value = 1234567890123L;
assertJson("{'value': 1234567890123}", serialize(bean));
DoubleBean bean = new DoubleBean();
bean.value = 1.234567890123E12;
assertJson("{'value': 1.234567890123E12}", serialize(bean));
}

@Test
Expand Down Expand Up @@ -2252,10 +2252,10 @@ public void serializingGenericBeansSupported() {
recursiveBean.value.value = "foo";
assertJson("{'value': {'value': 'foo'}}", serialize(recursiveBean));

DoubleGenericBean<String, Integer> doubleBean = new DoubleGenericBean<>();
DoubleGenericBean<String, Double> doubleBean = new DoubleGenericBean<>();
doubleBean.valueA = "foo";
doubleBean.valueB = 1;
assertJson("{'valueA': 'foo', 'valueB': 1}", serialize(doubleBean));
doubleBean.valueB = 1.0;
assertJson("{'valueB': 1, 'valueA': 'foo'}", serialize(doubleBean));
}

@Test
Expand Down Expand Up @@ -2492,7 +2492,7 @@ public void run() {
@Test
public void settersCanOverridePrimitiveSettersSerializing() {
NonConflictingSetterSubBean bean = new NonConflictingSetterSubBean();
bean.value = 1;
bean.value = 1.0;
assertJson("{'value': 1}", serialize(bean));
}

Expand All @@ -2501,7 +2501,7 @@ public void settersCanOverridePrimitiveSettersParsing() {
NonConflictingSetterSubBean bean =
deserialize("{'value': 2}", NonConflictingSetterSubBean.class);
// sub-bean converts to negative value
assertEquals(-2, bean.value);
assertEquals(-2, bean.value, 0);
}

@Test
Expand Down

0 comments on commit 0ecbedb

Please sign in to comment.