Skip to content

Commit 0c6761c

Browse files
Fix 13076
1 parent 7389a6d commit 0c6761c

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

stubs/dom.stub

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class DOMNode
3131
{
3232

3333
/**
34-
* @var DOMNamedNodeMap|null
34+
* @var DOMNamedNodeMap<DOMAttr>|null
3535
*/
3636
public $attributes;
3737

3838
/**
39-
* @phpstan-assert-if-true !null $this->attributes
39+
* @phpstan-assert-if-true =DOMNamedNodeMap $this->attributes
4040
* @return bool
4141
*/
4242
public function hasAttributes() {}
@@ -46,6 +46,9 @@ class DOMNode
4646
class DOMElement extends DOMNode
4747
{
4848

49+
/** @var DOMNamedNodeMap<DOMAttr> */
50+
public $attributes;
51+
4952
/** @var DOMDocument */
5053
public $ownerDocument;
5154

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug13076;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class Foo
8+
{
9+
public function test(\DOMNode $node): void
10+
{
11+
if ($node->hasAttributes()) {
12+
assertType('DOMNamedNodeMap&iterable<DOMAttr>', $node->attributes);
13+
} else {
14+
assertType('(DOMNamedNodeMap&iterable<DOMAttr>)|null', $node->attributes);
15+
}
16+
}
17+
18+
public function testElement(\DOMElement $node): void
19+
{
20+
if ($node->hasAttributes()) {
21+
assertType('DOMNamedNodeMap&iterable<DOMAttr>', $node->attributes);
22+
} else {
23+
assertType('DOMNamedNodeMap&iterable<DOMAttr>', $node->attributes);
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)