Fixed the bug where copyOf() for a ParameterizedTypeHandlerMap was failing when hierarchical type adapters for a sub class and its base class were present.
Fixed previously broken tests to verify the behavior that a hierarchical type adapter for a sub-class can be registered after registering a hierarchical type adapter for the base-class. The vice-versa is not allowed as it would result in hiding the sub-class hierarchical type adapter.
This commit is contained in:
parent
912add0779
commit
0c35edab65
@ -172,12 +172,10 @@ final class ParameterizedTypeHandlerMap<T> {
|
|||||||
|
|
||||||
public synchronized ParameterizedTypeHandlerMap<T> copyOf() {
|
public synchronized ParameterizedTypeHandlerMap<T> copyOf() {
|
||||||
ParameterizedTypeHandlerMap<T> copy = new ParameterizedTypeHandlerMap<T>();
|
ParameterizedTypeHandlerMap<T> copy = new ParameterizedTypeHandlerMap<T>();
|
||||||
for (Map.Entry<Type, T> entry : map.entrySet()) {
|
// Instead of individually registering entries in the map, make an efficient copy
|
||||||
copy.register(entry.getKey(), entry.getValue());
|
// of the list and map
|
||||||
}
|
copy.map.putAll(map);
|
||||||
for (Pair<Class<?>, T> entry : typeHierarchyList) {
|
copy.typeHierarchyList.addAll(typeHierarchyList);
|
||||||
copy.registerForTypeHierarchy(entry);
|
|
||||||
}
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ public final class TypeHierarchyAdapterTest extends TestCase {
|
|||||||
((Manager) company.ceo.minions[2]).minions[1].userid);
|
((Manager) company.ceo.minions[2]).minions[1].userid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRegisterSubtypeFirst() {
|
public void testRegisterSuperTypeFirst() {
|
||||||
Gson gson = new GsonBuilder()
|
Gson gson = new GsonBuilder()
|
||||||
.registerTypeHierarchyAdapter(Employee.class, new EmployeeAdapter())
|
.registerTypeHierarchyAdapter(Employee.class, new EmployeeAdapter())
|
||||||
.registerTypeHierarchyAdapter(Manager.class, new ManagerAdapter())
|
.registerTypeHierarchyAdapter(Manager.class, new ManagerAdapter())
|
||||||
@ -131,12 +131,12 @@ public final class TypeHierarchyAdapterTest extends TestCase {
|
|||||||
assertEquals(manager.userid, copied.userid);
|
assertEquals(manager.userid, copied.userid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRegisterSupertypeFirst() {
|
public void testRegisterSubTypeFirstNotAllowed() {
|
||||||
GsonBuilder builder = new GsonBuilder()
|
|
||||||
.registerTypeHierarchyAdapter(Manager.class, new ManagerAdapter())
|
|
||||||
.registerTypeHierarchyAdapter(Employee.class, new EmployeeAdapter());
|
|
||||||
try {
|
try {
|
||||||
builder.create();
|
Gson gson = new GsonBuilder()
|
||||||
|
.registerTypeHierarchyAdapter(Manager.class, new ManagerAdapter())
|
||||||
|
.registerTypeHierarchyAdapter(Employee.class, new EmployeeAdapter())
|
||||||
|
.create();
|
||||||
fail();
|
fail();
|
||||||
} catch (IllegalArgumentException expected) {
|
} catch (IllegalArgumentException expected) {
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user