Skip to content

Commit e0c3a4f

Browse files
committed
Revert "Useful PhpMethodReflection native type refactoring from phpstan#3966"
This reverts commit 3854cbc.
1 parent ea7072c commit e0c3a4f

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

src/Reflection/Php/PhpMethodReflection.php

+24-23
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,30 @@ public function isPublic(): bool
302302
private function getReturnType(): Type
303303
{
304304
if ($this->returnType === null) {
305-
$this->returnType = TypehintHelper::decideType(
306-
$this->getNativeReturnType(),
305+
$name = strtolower($this->getName());
306+
$returnType = $this->reflection->getReturnType();
307+
if ($returnType === null) {
308+
if (in_array($name, ['__construct', '__destruct', '__unset', '__wakeup', '__clone'], true)) {
309+
return $this->returnType = TypehintHelper::decideType(new VoidType(), $this->phpDocReturnType);
310+
}
311+
if ($name === '__tostring') {
312+
return $this->returnType = TypehintHelper::decideType(new StringType(), $this->phpDocReturnType);
313+
}
314+
if ($name === '__isset') {
315+
return $this->returnType = TypehintHelper::decideType(new BooleanType(), $this->phpDocReturnType);
316+
}
317+
if ($name === '__sleep') {
318+
return $this->returnType = TypehintHelper::decideType(new ArrayType(new IntegerType(), new StringType()), $this->phpDocReturnType);
319+
}
320+
if ($name === '__set_state') {
321+
return $this->returnType = TypehintHelper::decideType(new ObjectWithoutClassType(), $this->phpDocReturnType);
322+
}
323+
}
324+
325+
$this->returnType = TypehintHelper::decideTypeFromReflection(
326+
$returnType,
307327
$this->phpDocReturnType,
328+
$this->declaringClass,
308329
);
309330
}
310331

@@ -323,28 +344,8 @@ private function getPhpDocReturnType(): Type
323344
private function getNativeReturnType(): Type
324345
{
325346
if ($this->nativeReturnType === null) {
326-
$returnType = $this->reflection->getReturnType();
327-
if ($returnType === null) {
328-
$name = strtolower($this->getName());
329-
if (in_array($this->getName(), ['__construct', '__destruct', '__unset', '__wakeup', '__clone'], true)) {
330-
return $this->nativeReturnType = new VoidType();
331-
}
332-
if ($name === '__tostring') {
333-
return $this->nativeReturnType = new StringType();
334-
}
335-
if ($name === '__isset') {
336-
return $this->nativeReturnType = new BooleanType();
337-
}
338-
if ($name === '__sleep') {
339-
return $this->nativeReturnType = new ArrayType(new IntegerType(), new StringType());
340-
}
341-
if ($name === '__set_state') {
342-
return $this->nativeReturnType = new ObjectWithoutClassType();
343-
}
344-
}
345-
346347
$this->nativeReturnType = TypehintHelper::decideTypeFromReflection(
347-
$returnType,
348+
$this->reflection->getReturnType(),
348349
null,
349350
$this->declaringClass,
350351
);

src/Type/TypehintHelper.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public static function decideTypeFromReflection(
6868
$type = ParserNodeTypeToPHPStanType::resolve($typeNode, $selfClass);
6969
if ($reflectionType->allowsNull()) {
7070
$type = TypeCombinator::addNull($type);
71+
} elseif ($phpDocType !== null) {
72+
$phpDocType = TypeCombinator::removeNull($phpDocType);
7173
}
7274

7375
return self::decideType($type, $phpDocType);
@@ -78,9 +80,6 @@ public static function decideType(
7880
?Type $phpDocType,
7981
): Type
8082
{
81-
if ($phpDocType !== null && $type->isNull()->no()) {
82-
$phpDocType = TypeCombinator::removeNull($phpDocType);
83-
}
8483
if ($type instanceof BenevolentUnionType) {
8584
return $type;
8685
}

0 commit comments

Comments
 (0)