You are here

MagicCallPatch.php in Zircon Profile 8

File

vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php
View source
<?php

/*
 * This file is part of the Prophecy.
 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
 *     Marcello Duarte <marcello.duarte@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Prophecy\Doubler\ClassPatch;

use phpDocumentor\Reflection\DocBlock;
use Prophecy\Doubler\Generator\Node\ClassNode;
use Prophecy\Doubler\Generator\Node\MethodNode;

/**
 * Discover Magical API using "@method" PHPDoc format.
 *
 * @author Thomas Tourlourat <thomas@tourlourat.com>
 */
class MagicCallPatch implements ClassPatchInterface {

  /**
   * Support any class
   *
   * @param ClassNode $node
   *
   * @return boolean
   */
  public function supports(ClassNode $node) {
    return true;
  }

  /**
   * Discover Magical API
   *
   * @param ClassNode $node
   */
  public function apply(ClassNode $node) {
    $parentClass = $node
      ->getParentClass();
    $reflectionClass = new \ReflectionClass($parentClass);
    $phpdoc = new DocBlock($reflectionClass
      ->getDocComment());
    $tagList = $phpdoc
      ->getTagsByName('method');
    foreach ($tagList as $tag) {
      $methodName = $tag
        ->getMethodName();
      if (!$reflectionClass
        ->hasMethod($methodName)) {
        $methodNode = new MethodNode($tag
          ->getMethodName());
        $methodNode
          ->setStatic($tag
          ->isStatic());
        $node
          ->addMethod($methodNode);
      }
    }
  }

  /**
   * Returns patch priority, which determines when patch will be applied.
   *
   * @return integer Priority number (higher - earlier)
   */
  public function getPriority() {
    return 50;
  }

}

Classes

Namesort descending Description
MagicCallPatch Discover Magical API using "@method" PHPDoc format.