Skip to content

Commit 3cda6fc

Browse files
committed
Check if @Final property is overridden
1 parent 3fa3b73 commit 3cda6fc

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

src/Rules/Properties/OverridingPropertyRule.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,16 @@ public function processNode(Node $node, Scope $scope): array
145145
))->identifier('property.parentPropertyFinal')
146146
->nonIgnorable()
147147
->build();
148+
} elseif ($prototype->isFinal()) {
149+
$errors[] = RuleErrorBuilder::message(sprintf(
150+
'Property %s::$%s overrides @final property %s::$%s.',
151+
$classReflection->getDisplayName(),
152+
$node->getName(),
153+
$prototype->getDeclaringClass()->getDisplayName(),
154+
$node->getName(),
155+
))->identifier('property.parentPropertyAnnotatedFinal')
156+
->nonIgnorable()
157+
->build();
148158
}
149159

150160
$typeErrors = [];

tests/PHPStan/Rules/Properties/OverridingPropertyRuleTest.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,27 @@ public function testFinal(): void
187187
$this->analyse([__DIR__ . '/data/overriding-final-property.php'], [
188188
[
189189
'Property OverridingFinalProperty\Bar::$a overrides final property OverridingFinalProperty\Foo::$a.',
190-
21,
190+
27,
191191
],
192192
[
193193
'Property OverridingFinalProperty\Bar::$b overrides final property OverridingFinalProperty\Foo::$b.',
194-
23,
194+
29,
195195
],
196196
[
197197
'Property OverridingFinalProperty\Bar::$c overrides final property OverridingFinalProperty\Foo::$c.',
198-
25,
198+
31,
199199
],
200200
[
201201
'Property OverridingFinalProperty\Bar::$d overrides final property OverridingFinalProperty\Foo::$d.',
202-
27,
202+
33,
203+
],
204+
[
205+
'Property OverridingFinalProperty\Bar::$e overrides @final property OverridingFinalProperty\Foo::$e.',
206+
35,
207+
],
208+
[
209+
'Property OverridingFinalProperty\Bar::$f overrides @final property OverridingFinalProperty\Foo::$f.',
210+
37,
203211
],
204212
]);
205213
}

tests/PHPStan/Rules/Properties/data/overriding-final-property.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ class Foo
1313

1414
protected private(set) int $d;
1515

16+
/** @final */
17+
public $e;
18+
19+
/** @final */
20+
protected $f;
21+
1622
}
1723

1824
class Bar extends Foo
@@ -26,4 +32,8 @@ class Bar extends Foo
2632

2733
public int $d;
2834

35+
public $e;
36+
37+
protected $f;
38+
2939
}

0 commit comments

Comments
 (0)