Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

EntityData.php

Namespace

mglaman\PHPStanDrupal\Drupal

File

vendor/mglaman/phpstan-drupal/src/Drupal/EntityData.php

View source
<?php

declare (strict_types=1);
namespace mglaman\PHPStanDrupal\Drupal;

use Drupal\Core\Config\Entity\ConfigEntityInterface;
use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\ContentEntityStorageInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use mglaman\PHPStanDrupal\Type\EntityStorage\ConfigEntityStorageType;
use mglaman\PHPStanDrupal\Type\EntityStorage\ContentEntityStorageType;
use mglaman\PHPStanDrupal\Type\EntityStorage\EntityStorageType;
use PHPStan\Type\ObjectType;
final class EntityData {
    
    /**
     * @var string
     */
    private $entityTypeId;
    
    /**
     * @var string|null
     */
    private $className;
    
    /**
     * @var string|null
     */
    private $storageClassName;
    public function __construct(string $entityTypeId, array $definition) {
        $this->entityTypeId = $entityTypeId;
        $this->className = $definition['class'] ?? null;
        $this->storageClassName = $definition['storage'] ?? null;
    }
    public function getClassType() : ?ObjectType {
        return $this->className === null ? null : new ObjectType($this->className);
    }
    public function getStorageType() : ?EntityStorageType {
        if ($this->storageClassName === null) {
            $classType = $this->getClassType();
            if ($classType === null) {
                return null;
            }
            if ((new ObjectType(ConfigEntityInterface::class))->isSuperTypeOf($classType)
                ->yes()) {
                $this->storageClassName = 'Drupal\\Core\\Config\\Entity\\ConfigEntityStorage';
            }
            elseif ((new ObjectType(ContentEntityInterface::class))->isSuperTypeOf($classType)
                ->yes()) {
                $this->storageClassName = 'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage';
            }
            else {
                return null;
            }
        }
        $storageType = new ObjectType($this->storageClassName);
        if ((new ObjectType(EntityStorageInterface::class))->isSuperTypeOf($storageType)
            ->no()) {
            return null;
        }
        if ((new ObjectType(ConfigEntityStorageInterface::class))->isSuperTypeOf($storageType)
            ->yes()) {
            return new ConfigEntityStorageType($this->entityTypeId, $this->storageClassName);
        }
        if ((new ObjectType(ContentEntityStorageInterface::class))->isSuperTypeOf($storageType)
            ->yes()) {
            return new ContentEntityStorageType($this->entityTypeId, $this->storageClassName);
        }
        return new EntityStorageType($this->entityTypeId, $this->storageClassName);
    }

}

Classes

Title Deprecated Summary
EntityData
RSS feed
Powered by Drupal