@Override
            @SuppressWarnings("unchecked")
            protected void doMergeFrom(Input input, Schema<Object> derivedSchema,
                                       Object owner) throws IOException
            {
                final Object value = derivedSchema.newMessage();

                if (input instanceof GraphInput)
                {
                    // update the actual reference.
                    ((GraphInput) input).updateLast(value, owner);
                }

                derivedSchema.mergeFrom(input, value);
                
                // added after deser (for hashCode computation)
                if (MapWrapper.class == owner.getClass())
                    ((MapWrapper<Object, Object>) owner).setValue(value);
                else
                    ((Collection<Object>) owner).add(value);
            }
This base class handles all the IO for reading and writing polymorphic fields. When a field's type is
polymorphic/dynamic (e.g interface/abstract/object), the type (id) needs to be written (ahead) before its
value/content to be able to deserialize it correctly.
<p>
The underlying impl will determine how the type (id) should be written.
<p>
An {@link IdStrategy} is standalone if the {@link #primaryGroup} is not set.

@author Leo Romanoff
@author David Yu
protostuff-runtime/src/main/java/io/protostuff/runtime/IdStrategy.java