phabel/src/Target/Php70/AnonymousClassReplacer.php

46 lines
936 B
PHP
Raw Normal View History

2020-08-03 21:31:32 +02:00
<?php
2020-08-13 18:30:12 +02:00
namespace Phabel\Target\Php70;
2020-08-03 21:31:32 +02:00
2020-08-13 18:30:12 +02:00
use Phabel\Plugin;
2020-08-03 21:31:32 +02:00
use PhpParser\Node;
2020-08-13 18:30:12 +02:00
class AnonymousClassReplacer extends Plugin
2020-08-03 21:31:32 +02:00
{
/**
* @var array
*/
protected $anonymousClassNodes = [];
public static $count = 0;
/**
* {@inheritdoc}
*/
public function leaveNode(Node $node)
{
if (!$node instanceof Node\Expr\New_) {
return;
}
$classNode = $node->class;
if (!$classNode instanceof Node\Stmt\Class_) {
return;
}
$newClassName = 'AnonymousClass'.(self::$count++);
$classNode->name = $newClassName;
$this->anonymousClassNodes[] = $classNode;
// Generate new code that instantiate our new class
$newNode = new Node\Expr\New_(
new Node\Expr\ConstFetch(
new Node\Name($newClassName)
),
$node->args
);
return $newNode;
}
}