You are here

class SplFileInfoPatch in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php \Prophecy\Doubler\ClassPatch\SplFileInfoPatch

SplFileInfo patch. Makes SplFileInfo and derivative classes usable with Prophecy.

@author Konstantin Kudryashov <ever.zet@gmail.com>

Hierarchy

Expanded class hierarchy of SplFileInfoPatch

File

vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php, line 23

Namespace

Prophecy\Doubler\ClassPatch
View source
class SplFileInfoPatch implements ClassPatchInterface {

  /**
   * Supports everything that extends SplFileInfo.
   *
   * @param ClassNode $node
   *
   * @return bool
   */
  public function supports(ClassNode $node) {
    if (null === $node
      ->getParentClass()) {
      return false;
    }
    return 'SplFileInfo' === $node
      ->getParentClass() || is_subclass_of($node
      ->getParentClass(), 'SplFileInfo');
  }

  /**
   * Updated constructor code to call parent one with dummy file argument.
   *
   * @param ClassNode $node
   */
  public function apply(ClassNode $node) {
    if ($node
      ->hasMethod('__construct')) {
      $constructor = $node
        ->getMethod('__construct');
    }
    else {
      $constructor = new MethodNode('__construct');
      $node
        ->addMethod($constructor);
    }
    if ($this
      ->nodeIsDirectoryIterator($node)) {
      $constructor
        ->setCode('return parent::__construct("' . __DIR__ . '");');
      return;
    }
    $constructor
      ->useParentCode();
  }

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

  /**
   * @param ClassNode $node
   * @return boolean
   */
  private function nodeIsDirectoryIterator(ClassNode $node) {
    $parent = $node
      ->getParentClass();
    return 'DirectoryIterator' === $parent || is_subclass_of($parent, 'DirectoryIterator');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SplFileInfoPatch::apply public function Updated constructor code to call parent one with dummy file argument. Overrides ClassPatchInterface::apply
SplFileInfoPatch::getPriority public function Returns patch priority, which determines when patch will be applied. Overrides ClassPatchInterface::getPriority
SplFileInfoPatch::nodeIsDirectoryIterator private function
SplFileInfoPatch::supports public function Supports everything that extends SplFileInfo. Overrides ClassPatchInterface::supports