namespace Psy\CodeCleaner;
use PhpParser\Node;
-use PhpParser\Node\Stmt\Class_ as ClassStmt;
+use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use Psy\Exception\FatalErrorException;
*/
public function enterNode(Node $node)
{
- if ($node instanceof ClassStmt) {
+ if ($node instanceof Class_) {
$this->class = $node;
$this->abstractMethods = array();
} elseif ($node instanceof ClassMethod) {
$this->abstractMethods[] = $name;
if ($node->stmts !== null) {
- throw new FatalErrorException(sprintf('Abstract function %s cannot contain body', $name));
+ $msg = sprintf('Abstract function %s cannot contain body', $name);
+ throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
}
}
}
*/
public function leaveNode(Node $node)
{
- if ($node instanceof ClassStmt) {
+ if ($node instanceof Class_) {
$count = count($this->abstractMethods);
if ($count > 0 && !$node->isAbstract()) {
- throw new FatalErrorException(sprintf(
+ $msg = sprintf(
'Class %s contains %d abstract method%s must therefore be declared abstract or implement the remaining methods (%s)',
$node->name,
$count,
- ($count === 0) ? '' : 's',
+ ($count === 1) ? '' : 's',
implode(', ', $this->abstractMethods)
- ));
+ );
+ throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
}
}
}