Skip to content

Commit ca3e5d2

Browse files
committed
Fix issues by copying code from Ondrej
1 parent a261621 commit ca3e5d2

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

stubs/dom.stub

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class DOMNode
3737

3838
/**
3939
* @phpstan-assert-if-true DOMNamedNodeMap<DOMAttr> $this->attributes
40-
* @phpstan-assert-if-false null $this->attributes
4140
*/
4241
public function hasAttributes(): bool {}
4342
}
@@ -48,6 +47,12 @@ class DOMElement extends DOMNode
4847
/** @var DOMDocument */
4948
public $ownerDocument;
5049

50+
/**
51+
* @readonly
52+
* @var DOMNamedNodeMap<DOMAttr>|null
53+
*/
54+
public $attributes;
55+
5156
/**
5257
* @param string $name
5358
* @return DOMNodeList<DOMElement>
@@ -64,11 +69,12 @@ class DOMElement extends DOMNode
6469
/**
6570
* @template-covariant T of string
6671
* @param T $qualifiedName
67-
* @phpstan-assert-if-true DOMAttr|DOMNameSpaceNode $this->getAttributeNode($qualifiedName)
72+
* @phpstan-assert-if-true =DOMAttr $this->getAttributeNode($qualifiedName)
73+
* @phpstan-assert-if-true =DOMNamedNodeMap<DOMAttr> $this->attributes
6874
*/
6975
public function hasAttribute(string $qualifiedName): bool {}
7076

71-
public function getAttributeNode(string $qualifiedName): DOMAttr|DOMNameSpaceNode|false {}
77+
public function getAttributeNode(string $qualifiedName): DOMAttr|false {}
7278
}
7379

7480
/**

tests/PHPStan/Analyser/nsrt/DOMLegacyNamedNodeNap.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public function basic_node(DOMNode $node): void {
2222

2323
public function element_node(DOMElement $element): void
2424
{
25+
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
2526
if ($element->hasAttribute('class')) {
2627
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
2728
$attribute = $element->getAttributeNode('class');
@@ -34,6 +35,7 @@ public function element_node(DOMElement $element): void
3435

3536
public function element_node_attribute_fetch_via_attributes_property(DOMElement $element): void
3637
{
38+
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
3739
if ($element->hasAttribute('class')) {
3840
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
3941
$attribute = $element->attributes->getNamedItem('class');
Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,24 @@
11
<?php
22

3-
use function PHPStan\Testing\assertType;
3+
namespace DOMNodeStubsAccessProperties;
44

55
function basic_node(\DOMNode $node): void {
6-
if ($node->hasAttributes()) {
7-
assertType(DOMNamedNodeMap::class . '<' . DOMAttr::class . '>', $node->attributes);
8-
} else {
9-
assertType('null', $node->attributes);
10-
}
6+
var_dump($node->attributes);
117
}
128

139
function element_node(\DOMElement $element): void
1410
{
1511
if ($element->hasAttribute('class')) {
16-
assertType(DOMNamedNodeMap::class . '<' . DOMAttr::class . '>', $element->attributes);
1712
$attribute = $element->getAttributeNode('class');
18-
assertType(DOMAttr::class, $attribute);
19-
assertType('string', $attribute->value);
20-
} else {
21-
assertType('DOMNamedNodeMap::class . '<' . DOMAttr::class . '>'|null', $element->attributes);
13+
echo $attribute->value;
2214
}
2315
}
2416

2517
function element_node_attribute_fetch_via_attributes_property(\DOMElement $element): void
2618
{
27-
if ($element->hasAttribute('class')) {
28-
assertType(DOMNamedNodeMap::class . '<' . DOMAttr::class . '>', $element->attributes);
29-
$attribute = $element->attributes->getNamedItem('class');
30-
if ($attribute === null) {
31-
return;
32-
}
33-
assertType(DOMAttr::class, $attribute);
34-
assertType('string', $attribute->value);
35-
} else {
36-
assertType('DOMNamedNodeMap::class . '<' . DOMAttr::class . '>'|null', $element->attributes);
19+
$attribute = $element->attributes->getNamedItem('class');
20+
if ($attribute === null) {
21+
return;
3722
}
23+
echo $attribute->value;
3824
}

0 commit comments

Comments
 (0)