/**
  * Provides access to a prototype of the Prooph\Done\Process\Type\Type (empty Object, with a Description and PrototypeProperties)
  *
  * @return Prototype
  */
 public static function prototype()
 {
     $implementer = get_called_class();
     if (PrototypeRegistry::hasPrototype($implementer)) {
         return PrototypeRegistry::getPrototype($implementer);
     }
     return new Prototype($implementer, static::buildDescription(), array('item' => new PrototypeProperty('item', static::itemPrototype())));
 }
 /**
  * @param string $relatedTypeClass
  * @param Description $descriptionOfType
  * @param PrototypeProperty[] $typeProperties
  */
 public function __construct($relatedTypeClass, Description $descriptionOfType, array $typeProperties)
 {
     Assertion::implementsInterface($relatedTypeClass, 'Prooph\\Done\\Process\\Type\\Type');
     foreach ($typeProperties as $propertyOfType) {
         Assertion::isInstanceOf($propertyOfType, 'Prooph\\Done\\Process\\Type\\PrototypeProperty');
     }
     $this->relatedTypeClass = $relatedTypeClass;
     $this->descriptionOfType = $descriptionOfType;
     $this->typeProperties = $typeProperties;
     PrototypeRegistry::registerPrototype($this);
 }
 /**
  * Provides access to a prototype of the Prooph\Done\Process\Type\Type (empty Object, with a Description and PrototypeProperties)
  *
  * @return Prototype
  */
 public static function prototype()
 {
     $implementer = get_called_class();
     if (PrototypeRegistry::hasPrototype($implementer)) {
         return PrototypeRegistry::getPrototype($implementer);
     }
     $propertyPrototypes = static::getPropertyPrototypes();
     $propertyMap = array();
     foreach ($propertyPrototypes as $propertyName => $propertyPrototype) {
         $propertyMap[$propertyName] = new PrototypeProperty($propertyName, $propertyPrototype);
     }
     return new Prototype($implementer, static::buildDescription(), $propertyMap);
 }