mirror of
https://github.com/danog/psalm.git
synced 2024-11-30 04:39:00 +01:00
Fix #2192 - allow static return value on templated object
This commit is contained in:
parent
4ee037923a
commit
3f837a3493
@ -217,7 +217,10 @@ class MethodCallAnalyzer extends \Psalm\Internal\Analyzer\Statements\Expression\
|
|||||||
$codebase,
|
$codebase,
|
||||||
$context,
|
$context,
|
||||||
$lhs_type_part,
|
$lhs_type_part,
|
||||||
$lhs_type_part instanceof Type\Atomic\TNamedObject ? $lhs_type_part : null,
|
$lhs_type_part instanceof Type\Atomic\TNamedObject
|
||||||
|
|| $lhs_type_part instanceof Type\Atomic\TTemplateParam
|
||||||
|
? $lhs_type_part
|
||||||
|
: null,
|
||||||
$lhs_var_id,
|
$lhs_var_id,
|
||||||
$return_type,
|
$return_type,
|
||||||
$returns_by_ref,
|
$returns_by_ref,
|
||||||
@ -400,7 +403,7 @@ class MethodCallAnalyzer extends \Psalm\Internal\Analyzer\Statements\Expression\
|
|||||||
* @param PhpParser\Node\Expr\MethodCall $stmt
|
* @param PhpParser\Node\Expr\MethodCall $stmt
|
||||||
* @param Codebase $codebase
|
* @param Codebase $codebase
|
||||||
* @param Context $context
|
* @param Context $context
|
||||||
* @param Type\Atomic $lhs_type_part
|
* @param Type\Atomic\TNamedObject|Type\Atomic\TTemplateParam $static_type
|
||||||
* @param ?string $lhs_var_id
|
* @param ?string $lhs_var_id
|
||||||
* @param ?Type\Union &$return_type
|
* @param ?Type\Union &$return_type
|
||||||
* @param bool &$returns_by_ref
|
* @param bool &$returns_by_ref
|
||||||
@ -419,7 +422,7 @@ class MethodCallAnalyzer extends \Psalm\Internal\Analyzer\Statements\Expression\
|
|||||||
Codebase $codebase,
|
Codebase $codebase,
|
||||||
Context $context,
|
Context $context,
|
||||||
Type\Atomic $lhs_type_part,
|
Type\Atomic $lhs_type_part,
|
||||||
?Type\Atomic\TNamedObject $static_type,
|
?Type\Atomic $static_type,
|
||||||
$lhs_var_id,
|
$lhs_var_id,
|
||||||
&$return_type,
|
&$return_type,
|
||||||
&$returns_by_ref,
|
&$returns_by_ref,
|
||||||
|
@ -1764,7 +1764,7 @@ class ClassTemplateTest extends TestCase
|
|||||||
return $bar->get();
|
return $bar->get();
|
||||||
}'
|
}'
|
||||||
],
|
],
|
||||||
'templatedThing' => [
|
'templatedLiteralStringReplacement' => [
|
||||||
'<?php
|
'<?php
|
||||||
/**
|
/**
|
||||||
* @template T
|
* @template T
|
||||||
|
@ -781,6 +781,24 @@ class FunctionTemplateTest extends TestCase
|
|||||||
$staticIdGenerator = idGenerator([Id::class, "fromString"]);
|
$staticIdGenerator = idGenerator([Id::class, "fromString"]);
|
||||||
client($staticIdGenerator());'
|
client($staticIdGenerator());'
|
||||||
],
|
],
|
||||||
|
'noCrashWhenTemplatedClassIsStatic' => [
|
||||||
|
'<?php
|
||||||
|
abstract class Model {
|
||||||
|
/** @return static */
|
||||||
|
public function newInstance() {
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template T of Model
|
||||||
|
* @param T $m
|
||||||
|
* @return T
|
||||||
|
*/
|
||||||
|
function foo(Model $m) : Model {
|
||||||
|
return $m->newInstance();
|
||||||
|
}'
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user