code: @SuppressWarnings("unchecked")
    private static <Type extends Message> Type copyAsType(
        final Type typeDefaultInstance, final Message source) {
      return (Type)typeDefaultInstance.newBuilderForType()
                                      .mergeFrom(source)
                                      .build();
    }
docs: Creates a new message of type "Type" which is a copy of "source".  "source"
  must have the same descriptor but may be a different class (e.g.
  DynamicMessage).