protected function resolveDefitions(PropertyDefinitionCollectionInterface $propertyDefinitionCollection = null)
    {
        if ($propertyDefinitionCollection instanceof PropertyDefinitionCollectionInterface) {
            return $propertyDefinitionCollection->import($this->propertiesAndTypes());
        }

        $className = $this->calledClassName();

        if ($this->runtimeCache->has($className, __METHOD__)) {
            return $this->runtimeCache->get($className, __METHOD__);
        }

        $propertyDefinitionCollection = $this->createPropertyDefinitionCollection();

        $propertyDefinitionCollection->import($this->propertiesAndTypes());

        $this->runtimeCache->set($className, $propertyDefinitionCollection, __METHOD__);

        return $propertyDefinitionCollection;
    }