public static function fromArray(array $data): Descriptor
    {
        // Default values
        $name = '';
        $configurationRootName = '';
        $rootNamespace = '';
        $path = '';
        $parentBundleDescriptor = null;
        $childBundleDescriptor = null;

        // Grab values from provided array
        if (array_key_exists('name', $data) && !empty($data['name'])) {
            $name = $data['name'];
        }

        if (array_key_exists('configurationRootName', $data) && !empty($data['configurationRootName'])) {
            $configurationRootName = $data['configurationRootName'];
        }

        if (array_key_exists('rootNamespace', $data) && !empty($data['rootNamespace'])) {
            $rootNamespace = $data['rootNamespace'];
        }

        if (array_key_exists('path', $data) && !empty($data['path'])) {
            $path = $data['path'];
        }

        if (array_key_exists('parentBundleDescriptor', $data) && !empty($data['parentBundleDescriptor'])) {
            $parentData = $data['parentBundleDescriptor'];
            $parentBundleDescriptor = static::fromArray($parentData);
        }

        if (array_key_exists('childBundleDescriptor', $data) && !empty($data['childBundleDescriptor'])) {
            $childData = $data['childBundleDescriptor'];
            $childBundleDescriptor = static::fromArray($childData);
        }

        return new static(
            $name,
            $configurationRootName,
            $rootNamespace,
            $path,
            $parentBundleDescriptor,
            $childBundleDescriptor
        );
    }