php-extension-check/src/Parser/Visitors/ClassCollector.php

49 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace Fbrinker\ExtensionCheck\Parser\Visitors;
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
class ClassCollector extends NodeVisitorAbstract implements CollectorInferface {
private $classes = [];
public function getCollected(): array {
$list = array_keys($this->classes);
natcasesort($list);
return array_values($list);
}
public function enterNode(Node $node) {
if ($node instanceof Node\Stmt\Class_) {
if (!empty($node->extends)) {
$this->classes[$node->extends->toString()] = true;
}
if (!empty($node->implements)) {
foreach($node->implements as $implement) {
$this->classes[$implement->toString()] = true;
}
}
}
if ($node instanceof Node\Stmt\UseUse) {
if (!empty($node->name) && $node->name instanceof Node\Name) {
$this->classes[$node->name->toString()] = true;
}
}
if ($node instanceof Node\Expr\New_) {
if (!empty($node->class) && $node->class->name instanceof Node\Name) {
$this->classes[$node->class->toString()] = true;
}
}
if ($node instanceof Node\Expr\ClassConstFetch) {
if (!empty($node->class) && $node->class instanceof Node\Name) {
$this->classes[$node->class->toString()] = true;
}
}
}
}