+ /**
+ * Magic method: Implements a deep clone.
+ */
+ public function __clone() {
+ parent::__clone();
+
+ // The itemDefinition (\Drupal\Core\Field\TypedData\FieldItemDataDefinition)
+ // has a property fieldDefinition, which is a recursive reference to the
+ // parent BaseFieldDefinition, therefore the reference to the old object has
+ // to be overwritten with a reference to the cloned one.
+ $this->itemDefinition->setFieldDefinition($this);
+ // Reset the static cache of the field property definitions in order to
+ // ensure that the clone will reference different field property definitions
+ // objects.
+ $this->propertyDefinitions = NULL;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isInternal() {
+ // All fields are not internal unless explicitly set.
+ return !empty($this->definition['internal']);
+ }
+