currentFileProvider = $currentFileProvider;
}
/**
* @return array
*/
public function resolve() : array
{
$namespace = $this->resolveNamespace();
if (!$namespace instanceof Node) {
return [];
}
return \array_filter($namespace->stmts, static function (Stmt $stmt) : bool {
return $stmt instanceof Use_ || $stmt instanceof GroupUse;
});
}
/**
* @api
* @return Use_[]
*/
public function resolveBareUses() : array
{
$namespace = $this->resolveNamespace();
if (!$namespace instanceof Node) {
return [];
}
return \array_filter($namespace->stmts, static function (Stmt $stmt) : bool {
return $stmt instanceof Use_;
});
}
/**
* @param \PhpParser\Node\Stmt\Use_|\PhpParser\Node\Stmt\GroupUse $use
*/
public function resolvePrefix($use) : string
{
return $use instanceof GroupUse ? $use->prefix . '\\' : '';
}
/**
* @return \PhpParser\Node\Stmt\Namespace_|\Rector\PhpParser\Node\CustomNode\FileWithoutNamespace|null
*/
private function resolveNamespace()
{
/** @var File|null $file */
$file = $this->currentFileProvider->getFile();
if (!$file instanceof File) {
return null;
}
$newStmts = $file->getNewStmts();
if ($newStmts === []) {
return null;
}
/** @var Namespace_[]|FileWithoutNamespace[] $namespaces */
$namespaces = \array_filter($newStmts, static function (Stmt $stmt) : bool {
return $stmt instanceof Namespace_ || $stmt instanceof FileWithoutNamespace;
});
// multiple namespaces is not supported
if (\count($namespaces) !== 1) {
return null;
}
return \current($namespaces);
}
}