/**
* Traverses the main PHP file, checks for namespaces, classes, if statements and use statements.
* A chain of responsibility could be used here to get rid of the awful if/else statements.
*
* @param $statements
* @param string $namespaceString
* @returns array $code
*/
protected function traverseStatements($statements, $namespaceString = '')
{
$uses = '';
$code = [];
foreach ($statements as $statement) {
if ($statement instanceof Namespace_) {
$namespaceString = implode('\\', $statement->name->parts);
$nestedCode = $this->traverseStatements($statement->stmts, $namespaceString);
$code = array_merge($code, $nestedCode);
} elseif ($statement instanceof Class_) {
if (empty($namespaceString)) {
$namespaceString = 'tmp';
}
$fileLocation = DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $namespaceString);
$code[$statement->name] = $this->getClass($statement, $namespaceString, $fileLocation, $uses);
} elseif ($statement instanceof If_) {
$nestedCode = $this->traverseStatements($statement->stmts, $namespaceString);
$code = array_merge($code, $nestedCode);
} elseif ($statement instanceof Use_) {
$uses .= $this->prettyPrinter->pStmt_Use($statement) . PHP_EOL;
}
}
return $code;
}