protected Object instantiateNewInstance(
     HierarchicalStreamReader reader, UnmarshallingContext context) {
   String readResolveValue = reader.getAttribute(mapper.aliasForAttribute("resolves-to"));
   Object currentObject = context.currentObject();
   if (currentObject != null) {
     return currentObject;
   } else if (readResolveValue != null) {
     return reflectionProvider.newInstance(mapper.realClass(readResolveValue));
   } else {
     return reflectionProvider.newInstance(context.getRequiredType());
   }
 }
 private Map writeValueToImplicitCollection(
     UnmarshallingContext context,
     Object value,
     Map implicitCollections,
     Object result,
     String itemFieldName) {
   String fieldName =
       mapper.getFieldNameForItemTypeAndName(
           context.getRequiredType(), value.getClass(), itemFieldName);
   if (fieldName != null) {
     if (implicitCollections == null) {
       implicitCollections = new HashMap(); // lazy instantiation
     }
     Collection collection = (Collection) implicitCollections.get(fieldName);
     if (collection == null) {
       Class fieldType =
           mapper.defaultImplementationOf(
               reflectionProvider.getFieldType(result, fieldName, null));
       if (!Collection.class.isAssignableFrom(fieldType)) {
         throw new ObjectAccessException(
             "Field "
                 + fieldName
                 + " of "
                 + result.getClass().getName()
                 + " is configured for an implicit Collection, but field is of type "
                 + fieldType.getName());
       }
       if (pureJavaReflectionProvider == null) {
         pureJavaReflectionProvider = new PureJavaReflectionProvider();
       }
       collection = (Collection) pureJavaReflectionProvider.newInstance(fieldType);
       reflectionProvider.writeField(result, fieldName, collection, null);
       implicitCollections.put(fieldName, collection);
     }
     collection.add(value);
   }
   return implicitCollections;
 }