Skip to content

Commit 2fb3dbe

Browse files
authored
Support for @final PHPDoc tag above properties
1 parent ce257d9 commit 2fb3dbe

21 files changed

+127
-20
lines changed

src/Reflection/Annotations/AnnotationPropertyReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ public function isAbstract(): TrinaryLogic
119119
return TrinaryLogic::createNo();
120120
}
121121

122+
public function isFinalByKeyword(): TrinaryLogic
123+
{
124+
return TrinaryLogic::createNo();
125+
}
126+
122127
public function isFinal(): TrinaryLogic
123128
{
124129
return TrinaryLogic::createNo();

src/Reflection/Dummy/ChangedTypePropertyReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public function isAbstract(): TrinaryLogic
116116
return $this->reflection->isAbstract();
117117
}
118118

119+
public function isFinalByKeyword(): TrinaryLogic
120+
{
121+
return $this->reflection->isFinalByKeyword();
122+
}
123+
119124
public function isFinal(): TrinaryLogic
120125
{
121126
return $this->reflection->isFinal();

src/Reflection/Dummy/DummyPropertyReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public function isAbstract(): TrinaryLogic
116116
return TrinaryLogic::createNo();
117117
}
118118

119+
public function isFinalByKeyword(): TrinaryLogic
120+
{
121+
return TrinaryLogic::createNo();
122+
}
123+
119124
public function isFinal(): TrinaryLogic
120125
{
121126
return TrinaryLogic::createNo();

src/Reflection/ExtendedPropertyReflection.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public function getNativeType(): Type;
3838

3939
public function isAbstract(): TrinaryLogic;
4040

41+
public function isFinalByKeyword(): TrinaryLogic;
42+
4143
public function isFinal(): TrinaryLogic;
4244

4345
public function isVirtual(): TrinaryLogic;

src/Reflection/Php/EnumPropertyReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ public function isAbstract(): TrinaryLogic
112112
return TrinaryLogic::createNo();
113113
}
114114

115+
public function isFinalByKeyword(): TrinaryLogic
116+
{
117+
return TrinaryLogic::createNo();
118+
}
119+
115120
public function isFinal(): TrinaryLogic
116121
{
117122
return TrinaryLogic::createNo();

src/Reflection/Php/PhpClassReflectionExtension.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private function createProperty(
218218
$types[] = $value;
219219
}
220220

221-
return new PhpPropertyReflection($declaringClassReflection, null, null, TypeCombinator::union(...$types), $classReflection->getNativeReflection()->getProperty($propertyName), null, null, null, false, false, false, false, []);
221+
return new PhpPropertyReflection($declaringClassReflection, null, null, TypeCombinator::union(...$types), $classReflection->getNativeReflection()->getProperty($propertyName), null, null, null, false, false, false, false, [], false);
222222
}
223223
}
224224

@@ -227,6 +227,7 @@ private function createProperty(
227227
$isDeprecated = $deprecation !== null;
228228
$isInternal = false;
229229
$isReadOnlyByPhpDoc = $classReflection->isImmutable();
230+
$isFinal = $classReflection->isFinal() || $propertyReflection->isFinal();
230231
$isAllowedPrivateMutation = false;
231232

232233
if (
@@ -308,6 +309,7 @@ private function createProperty(
308309
}
309310
$isInternal = $resolvedPhpDoc->isInternal();
310311
$isReadOnlyByPhpDoc = $isReadOnlyByPhpDoc || $resolvedPhpDoc->isReadOnly();
312+
$isFinal = $isFinal || $resolvedPhpDoc->isFinal();
311313
$isAllowedPrivateMutation = $resolvedPhpDoc->isAllowedPrivateMutation();
312314
}
313315

@@ -435,6 +437,7 @@ private function createProperty(
435437
$isReadOnlyByPhpDoc,
436438
$isAllowedPrivateMutation,
437439
$this->attributeReflectionFactory->fromNativeReflection($propertyReflection->getAttributes(), InitializerExprContext::fromClass($declaringClassReflection->getName(), $declaringClassReflection->getFileName())),
440+
$isFinal,
438441
);
439442
}
440443

src/Reflection/Php/PhpPropertyReflection.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public function __construct(
4444
private bool $isReadOnlyByPhpDoc,
4545
private bool $isAllowedPrivateMutation,
4646
private array $attributes,
47+
private bool $isFinal,
4748
)
4849
{
4950
}
@@ -242,11 +243,16 @@ public function isAbstract(): TrinaryLogic
242243
return TrinaryLogic::createFromBoolean($this->reflection->isAbstract());
243244
}
244245

245-
public function isFinal(): TrinaryLogic
246+
public function isFinalByKeyword(): TrinaryLogic
246247
{
247248
return TrinaryLogic::createFromBoolean($this->reflection->isFinal());
248249
}
249250

251+
public function isFinal(): TrinaryLogic
252+
{
253+
return TrinaryLogic::createFromBoolean($this->isFinal);
254+
}
255+
250256
public function isVirtual(): TrinaryLogic
251257
{
252258
return TrinaryLogic::createFromBoolean($this->reflection->isVirtual());

src/Reflection/Php/SimpleXMLElementProperty.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public function isAbstract(): TrinaryLogic
127127
return TrinaryLogic::createNo();
128128
}
129129

130+
public function isFinalByKeyword(): TrinaryLogic
131+
{
132+
return TrinaryLogic::createNo();
133+
}
134+
130135
public function isFinal(): TrinaryLogic
131136
{
132137
return TrinaryLogic::createNo();

src/Reflection/Php/UniversalObjectCrateProperty.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ public function isAbstract(): TrinaryLogic
117117
return TrinaryLogic::createNo();
118118
}
119119

120+
public function isFinalByKeyword(): TrinaryLogic
121+
{
122+
return TrinaryLogic::createNo();
123+
}
124+
120125
public function isFinal(): TrinaryLogic
121126
{
122127
return TrinaryLogic::createNo();

src/Reflection/ResolvedPropertyReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ public function isAbstract(): TrinaryLogic
174174
return $this->reflection->isAbstract();
175175
}
176176

177+
public function isFinalByKeyword(): TrinaryLogic
178+
{
179+
return $this->reflection->isFinalByKeyword();
180+
}
181+
177182
public function isFinal(): TrinaryLogic
178183
{
179184
return $this->reflection->isFinal();

0 commit comments

Comments
 (0)