diff --git a/src/CodeManipulation/Actions/Generic.php b/src/CodeManipulation/Actions/Generic.php index fb0ea54..2876f09 100644 --- a/src/CodeManipulation/Actions/Generic.php +++ b/src/CodeManipulation/Actions/Generic.php @@ -78,6 +78,10 @@ function prependCodeToFunctions($code, $typedVariants = array(), $fillArgRefs = function getDeclaredReturnType(Source $s, $function) { $parenthesis = $s->next(LEFT_ROUND, $function); + $name = $s->next(T_STRING, $function); + if ($name < $parenthesis && ($s->read($name) === '__construct' || $s->read($name) === '__destruct')) { + return 'void'; + } $next = $s->skip(Source::junk(), $s->match($parenthesis)); if ($s->is(T_USE, $next)) { $next = $s->skip(Source::junk(), $s->match($s->next(LEFT_ROUND, $next))); diff --git a/tests/includes/NamedObject.php b/tests/includes/NamedObject.php index ed075b2..9254b21 100644 --- a/tests/includes/NamedObject.php +++ b/tests/includes/NamedObject.php @@ -4,13 +4,32 @@ class NamedObject { private $name; - function __construct($name) + public function __construct($name) { $this->name = $name; } - function getName() + public function getName() { return $this->name; } + + public function __destruct() + { + } + + public static function createAnonymousSubclassInstance() + { + return new class extends NamedObject { + public function __construct() + { + } + + public function __destruct() + { + } + }; + } } + +NamedObject::createAnonymousSubclassInstance(); diff --git a/tests/return-from-constructor.phpt b/tests/return-from-constructor.phpt new file mode 100644 index 0000000..80e8181 --- /dev/null +++ b/tests/return-from-constructor.phpt @@ -0,0 +1,52 @@ +--TEST-- +Return from constructor / antecedent/patchwork#213 + +--FILE-- + +===DONE=== + +--EXPECT-- +Named class: +Patchwork\Exceptions\NonNullToVoid +Anonymous subclass: +Patchwork\Exceptions\NonNullToVoid +===DONE=== diff --git a/tests/return-from-destructor.phpt b/tests/return-from-destructor.phpt new file mode 100644 index 0000000..009eeb0 --- /dev/null +++ b/tests/return-from-destructor.phpt @@ -0,0 +1,53 @@ +--TEST-- +Return from destructor / antecedent/patchwork#213 + +--FILE-- + +===DONE=== + +--EXPECT-- +Named class: +Patchwork\Exceptions\NonNullToVoid +Anonymous subclass: +Patchwork\Exceptions\NonNullToVoid +===DONE===