ide_helper-8.x-2.x-dev/src/Robo/Task/PhpstormMetaRendererTask.php

src/Robo/Task/PhpstormMetaRendererTask.php
<?php

declare(strict_types = 1);

namespace Drupal\ide_helper\Robo\Task;

use Drupal\ide_helper\Handlers\PhpStormMetaRenderer;

class PhpstormMetaRendererTask extends BaseTask {

  protected array $phpStormMeta = [];

  public function getPhpStormMeta(): array {
    return $this->phpStormMeta;
  }

  /**
   * @return $this
   */
  public function setPhpStormMeta(array $value) {
    $this->phpStormMeta = $value;

    return $this;
  }

  protected bool $multipleFiles = TRUE;

  public function getMultipleFiles(): bool {
    return $this->multipleFiles;
  }

  /**
   * @return $this
   */
  public function setMultipleFiles(bool $value) {
    $this->multipleFiles = $value;

    return $this;
  }

  protected PhpStormMetaRenderer $phpStormMetaRenderer;

  /**
   * {@inheritdoc}
   */
  public function setOptions(array $options) {
    parent::setOptions($options);

    if (array_key_exists('phpStormMeta', $options)) {
      $this->setPhpStormMeta($options['phpStormMeta']);
    }

    if (array_key_exists('multipleFiles', $options)) {
      $this->setPhpStormMeta($options['multipleFiles']);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function runAction() {
    $this->phpStormMetaRenderer = $this
      ->getContainer()
      ->get('class_resolver')
      ->getInstanceFromDefinition(PhpStormMetaRenderer::class);

    $this->getMultipleFiles() ? $this->runActionMultipleFiles() : $this->runActionSingleFile();

    return $this;
  }

  /**
   * @return $this
   */
  protected function runActionMultipleFiles() {
    foreach ($this->getPhpStormMeta() as $extensionNameFull => $phpStormMeta) {
      $extensionNameFullLower = mb_strtolower($extensionNameFull);
      $this->addPhpStormMetaToRenderer($phpStormMeta);
      $this->assets['phpStormMetaFiles'][".phpstorm.meta.php/$extensionNameFullLower.php"] = $this->phpStormMetaRenderer->render();
    }

    return $this;
  }

  /**
   * @return $this
   */
  protected function runActionSingleFile() {
    foreach ($this->getPhpStormMeta() as $phpStormMeta) {
      $this->addPhpStormMetaToRenderer($phpStormMeta);
    }
    $this->assets['phpStormMetaFiles']['.phpstorm.meta.php'] = $this->phpStormMetaRenderer->render();

    return $this;
  }

  /**
   * @return $this
   */
  protected function addPhpStormMetaToRenderer(array $phpStormMeta) {
    if (!empty($phpStormMeta['overrides'])) {
      foreach ($phpStormMeta['overrides'] as $override) {
        $this->phpStormMetaRenderer->addOverride(
          $override['class'],
          $override['method'],
          $override['map']
        );
      }
    }

    return $this;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc