Skip to content
This repository was archived by the owner on Mar 6, 2022. It is now read-only.

Commit 98edbd5

Browse files
committed
Do not render PHP 8 promoted properties
1 parent 58c9a12 commit 98edbd5

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"php": "^7.3",
1313
"microsoft/tolerant-php-parser": "~0.0.1",
1414
"phpactor/text-document": "^1.2.2",
15-
"phpactor/worse-reflection": "~0.2",
15+
"phpactor/worse-reflection": "~0.4.4",
1616
"twig/twig": "^2.4"
1717
},
1818
"require-dev": {

lib/Adapter/WorseReflection/WorseBuilderFactory.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use Phpactor\CodeBuilder\Domain\BuilderFactory;
66
use Phpactor\TextDocument\TextDocument;
77
use Phpactor\TextDocument\TextDocumentBuilder;
8+
use Phpactor\WorseReflection\Core\Reflection\ReflectionClass;
9+
use Phpactor\WorseReflection\Core\Reflection\ReflectionTrait;
810
use Phpactor\WorseReflection\Reflector;
911
use Phpactor\CodeBuilder\Domain\Builder\SourceCodeBuilder;
1012
use Phpactor\WorseReflection\Core\Reflection\ReflectionProperty;
@@ -67,9 +69,12 @@ private function build(string $type, SourceCodeBuilder $builder, ReflectionClass
6769
$classBuilder = $builder->$type($reflectionClass->name()->short());
6870
$builder->namespace($reflectionClass->name()->namespace());
6971

70-
if ($reflectionClass->isClass() || $reflectionClass->isTrait()) {
71-
// TODO: Worse reflection doesn't support ->belongingTo properties
72+
if ($reflectionClass instanceof ReflectionClass || $reflectionClass instanceof ReflectionTrait) {
7273
foreach ($reflectionClass->properties()->belongingTo($reflectionClass->name()) as $property) {
74+
assert($property instanceof ReflectionProperty);
75+
if ($property->isPromoted()) {
76+
continue;
77+
}
7378
$this->buildProperty($classBuilder, $property);
7479
}
7580
}

phpstan-baseline.neon

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,6 @@ parameters:
395395
count: 1
396396
path: lib/Adapter/WorseReflection/WorseBuilderFactory.php
397397

398-
-
399-
message: "#^Call to an undefined method Phpactor\\\\WorseReflection\\\\Core\\\\Reflection\\\\ReflectionClassLike\\:\\:properties\\(\\)\\.$#"
400-
count: 1
401-
path: lib/Adapter/WorseReflection/WorseBuilderFactory.php
402-
403398
-
404399
message: "#^Parameter \\#2 \\$method of method Phpactor\\\\CodeBuilder\\\\Adapter\\\\WorseReflection\\\\WorseBuilderFactory\\:\\:buildMethod\\(\\) expects Phpactor\\\\WorseReflection\\\\Core\\\\Reflection\\\\ReflectionMethod, Phpactor\\\\WorseReflection\\\\Core\\\\Reflection\\\\ReflectionMember given\\.$#"
405400
count: 1

tests/Adapter/WorseReflection/WorseBuilderFactoryTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,12 @@ public function testInterfaceWithMethodParameters()
223223
$this->assertEquals('foo', (string) $source->interfaces()->first()->methods()->get('hello')->parameters()->get('foo')->name());
224224
}
225225

226+
public function testDoesNotBuildPHP8PromotedProperties(): void
227+
{
228+
$source = $this->build('<?php class Foobar { function __construct(private $foobar){}}');
229+
self::assertEquals(0, $source->classes()->first()->properties()->count());
230+
}
231+
226232
private function build(string $source): SourceCode
227233
{
228234
$reflector = ReflectorBuilder::create()

0 commit comments

Comments
 (0)