/**
  * Discovers all fields/properties of an entity.
  *
  * @param \Drupal\feeds\ImporterInterface $importer
  *   The importer.
  */
 protected static function buildProperties(EntityProcessor $processor)
 {
     $entity_type = $processor->entityType();
     $info = \Drupal::entityManager()->getDefinition($entity_type);
     $bundle_key = NULL;
     if (isset($info['entity_keys']['bundle'])) {
         $bundle_key = $info['entity_keys']['bundle'];
     }
     $field_definitions = \Drupal::entityManager()->getFieldDefinitions($entity_type, $processor->bundle());
     foreach ($field_definitions as $id => $field_definition) {
         if ($field_definition->isReadOnly() || $id == $bundle_key) {
             continue;
         }
         static::$properties[$id] = $field_definition->getItemDefinition()->toArray();
         static::$properties[$id]['label'] = $field_definition->getLabel();
         static::$properties[$id]['description'] = $field_definition->getDescription();
         static::$properties[$id]['settings'] = $field_definition->getSettings();
         foreach (\Drupal::typedData()->create($field_definition->getItemDefinition())->getPropertyDefinitions() as $property => $data_definition) {
             if (!$data_definition->isComputed()) {
                 static::$properties[$id]['properties'][$property] = $data_definition->toArray();
             }
         }
         $instance_id = $entity_type . '.' . $processor->bundle() . '.' . $id;
         $instance = \Drupal::entityManager()->getStorageController('field_instance')->load($instance_id);
         if ($instance) {
             static::$properties[$id]['label'] = $instance->getLabel();
             static::$properties[$id]['description'] = $instance->getDescription();
             static::$properties[$id]['settings'] = $instance->getSettings();
         }
     }
 }