/**
  * @param string $action
  * @param EntityId $entityId
  * @param Diff $diff
  * @param array $fields
  *
  * @return EntityChange
  */
 private function newEntityChange($action, EntityId $entityId, Diff $diff, array $fields)
 {
     /** @var EntityChange $instance  */
     $instance = new ItemChange($fields);
     if (!$instance->hasField('object_id')) {
         $instance->setField('object_id', $entityId->getSerialization());
     }
     if (!$instance->hasField('info')) {
         $instance->setField('info', array());
     }
     // Note: the change type determines how the client will
     // instantiate and handle the change
     $type = 'wikibase-' . $entityId->getEntityType() . '~' . $action;
     $instance->setField('type', $type);
     $instance->setDiff($diff);
     return $instance;
 }