Skip to content

Commit b0531e1

Browse files
committed
Ensure "excluder" is added prior to user defined type adapters/factories.
- Added test expose bad behaviour.
1 parent 6d90f0d commit b0531e1

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

gson/src/main/java/com/google/gson/Gson.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ public Gson() {
195195
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
196196
factories.add(ObjectTypeAdapter.FACTORY);
197197

198+
// the excluder must precede all adapters that handle user-defined types
199+
factories.add(excluder);
200+
198201
// user's type adapters
199202
factories.addAll(typeAdapterFactories);
200203

@@ -231,9 +234,6 @@ public Gson() {
231234
factories.add(TypeAdapters.ENUM_FACTORY);
232235
factories.add(TypeAdapters.CLASS_FACTORY);
233236

234-
// the excluder must precede all adapters that handle user-defined types
235-
factories.add(excluder);
236-
237237
// type adapters for composite and user-defined types
238238
factories.add(new CollectionTypeAdapterFactory(constructorConstructor));
239239
factories.add(new MapTypeAdapterFactory(constructorConstructor, complexMapKeySerialization));
@@ -888,11 +888,11 @@ public void setDelegate(TypeAdapter<T> typeAdapter) {
888888

889889
@Override
890890
public String toString() {
891-
StringBuilder sb = new StringBuilder("{")
892-
.append("serializeNulls:").append(serializeNulls)
891+
return new StringBuilder("{serializeNulls:")
892+
.append(serializeNulls)
893893
.append("factories:").append(factories)
894894
.append(",instanceCreators:").append(constructorConstructor)
895-
.append("}");
896-
return sb.toString();
895+
.append("}")
896+
.toString();
897897
}
898898
}

gson/src/test/java/com/google/gson/functional/ObjectTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@
1919
import com.google.gson.Gson;
2020
import com.google.gson.GsonBuilder;
2121
import com.google.gson.InstanceCreator;
22+
import com.google.gson.JsonElement;
2223
import com.google.gson.JsonObject;
2324
import com.google.gson.JsonParseException;
25+
import com.google.gson.JsonSerializationContext;
26+
import com.google.gson.JsonSerializer;
27+
import com.google.gson.common.TestTypes;
2428
import com.google.gson.common.TestTypes.ArrayOfObjects;
2529
import com.google.gson.common.TestTypes.BagOfPrimitiveWrappers;
2630
import com.google.gson.common.TestTypes.BagOfPrimitives;
@@ -284,6 +288,21 @@ public void testAnonymousLocalClassesSerialization() throws Exception {
284288
}));
285289
}
286290

291+
public void testAnonymousLocalClassesCustomSerialization() throws Exception {
292+
gson = new GsonBuilder()
293+
.registerTypeHierarchyAdapter(ClassWithNoFields.class,
294+
new JsonSerializer<ClassWithNoFields>() {
295+
public JsonElement serialize(
296+
ClassWithNoFields src, Type typeOfSrc, JsonSerializationContext context) {
297+
return new JsonObject();
298+
}
299+
}).create();
300+
301+
assertEquals("null", gson.toJson(new ClassWithNoFields() {
302+
// empty anonymous class
303+
}));
304+
}
305+
287306
public void testPrimitiveArrayFieldSerialization() {
288307
PrimitiveArray target = new PrimitiveArray(new long[] { 1L, 2L, 3L });
289308
assertEquals(target.getExpectedJson(), gson.toJson(target));

0 commit comments

Comments
 (0)