Skip to content

Commit b570b64

Browse files
committed
fix: resolvedName undefined when class is in the same namespace
1 parent 77f7093 commit b570b64

File tree

6 files changed

+21
-14
lines changed

6 files changed

+21
-14
lines changed

php-subsystem/src/NodeUtil.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,9 @@ public static function addUsesToNamespace(Node\Stmt\Namespace_ $node, array $use
6969
array_splice($node->stmts, $lastUseStatement + 1, 0, $uses);
7070
}
7171
}
72+
73+
public static function className($expr): ?string
74+
{
75+
return $expr->getAttribute('resolvedName')?->name ?? $expr->name;
76+
}
7277
}

php-subsystem/src/NodeVisitors/ChangeSignatures.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public function enterNode(Node $node)
3131

3232
if (! $this->valid && $node instanceof Class_) {
3333
$implements = array_map(function (Node\Name $interface) {
34-
return $interface->getAttribute('resolvedName')->name;
34+
return NodeUtil::className($interface);
3535
}, $node->implements);
3636

37-
$extends = $node->extends ? $node->extends->getAttribute('resolvedName')->name : null;
37+
$extends = $node->extends ? NodeUtil::className($node->extends) : null;
3838

3939
if ($extends && isset($this->changes[$extends])) {
4040
$this->valid = true;

php-subsystem/src/Upgrade/TwoPointOh/EmailViews.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Flarum\CliPhpSubsystem\Upgrade\TwoPointOh;
44

5+
use Flarum\CliPhpSubsystem\NodeUtil;
56
use Flarum\CliPhpSubsystem\NodeVisitors\ChangeSignatures;
67
use Flarum\CliPhpSubsystem\Upgrade\Replacement;
78
use Flarum\CliPhpSubsystem\Upgrade\ReplacementResult;
@@ -37,7 +38,7 @@ function run(string $file, string $code, array $ast, array $data): ?ReplacementR
3738

3839
public function enterNode(\PhpParser\Node $node)
3940
{
40-
if ($node instanceof \PhpParser\Node\Stmt\Class_ && (!$node->implements || ! in_array($this->interface, array_map(function ($interface) { return $interface->getAttribute('resolvedName')->name; }, $node->implements)))) {
41+
if ($node instanceof \PhpParser\Node\Stmt\Class_ && (!$node->implements || ! in_array($this->interface, array_map(function ($interface) { return NodeUtil::className($interface); }, $node->implements)))) {
4142
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
4243
}
4344

@@ -53,7 +54,7 @@ public function enterNode(\PhpParser\Node $node)
5354

5455
public function leaveNode(Node $node)
5556
{
56-
if ($node instanceof \PhpParser\Node\Stmt\Class_ && (!$node->implements || ! in_array($this->interface, array_map(function ($interface) { return $interface->getAttribute('resolvedName')->name; }, $node->implements)))) {
57+
if ($node instanceof \PhpParser\Node\Stmt\Class_ && (!$node->implements || ! in_array($this->interface, array_map(function ($interface) { return NodeUtil::className($interface); }, $node->implements)))) {
5758
return NodeVisitor::STOP_TRAVERSAL;
5859
}
5960

php-subsystem/src/Upgrade/TwoPointOh/InterventionImage.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Flarum\CliPhpSubsystem\Upgrade\TwoPointOh;
44

5+
use Flarum\CliPhpSubsystem\NodeUtil;
56
use Flarum\CliPhpSubsystem\NodeVisitors\ReplaceUses;
67
use Flarum\CliPhpSubsystem\Upgrade\Replacement;
78
use Flarum\CliPhpSubsystem\Upgrade\ReplacementResult;
@@ -35,9 +36,9 @@ public function enterNode(Node $node)
3536
if ($node instanceof Node\Stmt\Property
3637
&& $node->type
3738
&& $node->type->hasAttribute('resolvedName')
38-
&& strpos($node->type->getAttribute('resolvedName')->name, 'Intervention\\Image\\') === 0
39+
&& strpos(NodeUtil::className($node->type), 'Intervention\\Image\\') === 0
3940
) {
40-
$this->propertyTypes[$node->props[0]->name->name] = $node->type->getAttribute('resolvedName')->name;
41+
$this->propertyTypes[$node->props[0]->name->name] = NodeUtil::className($node->type);
4142
}
4243

4344
if ($node instanceof Node\Stmt\ClassMethod && $node->name->name === '__construct') {
@@ -46,12 +47,12 @@ public function enterNode(Node $node)
4647
|| ! $param->type
4748
|| ! $param->type->hasAttribute('resolvedName')
4849
|| ! is_string($param->var->name)
49-
|| strpos($param->type->getAttribute('resolvedName')->name, 'Intervention\\Image\\') !== 0
50+
|| strpos(NodeUtil::className($param->type), 'Intervention\\Image\\') !== 0
5051
) {
5152
continue;
5253
}
5354

54-
$this->propertyTypes[$param->var->name] = $param->type->getAttribute('resolvedName')->name;
55+
$this->propertyTypes[$param->var->name] = NodeUtil::className($param->type);
5556
}
5657
}
5758
}

php-subsystem/src/Upgrade/TwoPointOh/JsonApi.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function run(string $file, string $code, array $ast, array $data): ?ReplacementR
4848
public function enterNode(\PhpParser\Node $node)
4949
{
5050
if ($node instanceof \PhpParser\Node\Stmt\Class_ && $node->extends) {
51-
if (in_array($node->extends->getAttribute('resolvedName')->name, self::STALE)) {
51+
if (in_array(NodeUtil::className($node->extends), self::STALE)) {
5252
$node->setAttribute('comments', [new \PhpParser\Comment\Doc(<<<PHPDOC
5353
/**
5454
* @TODO: Remove this in favor of one of the API resource classes that were added.
@@ -145,7 +145,7 @@ public function enterNode(\PhpParser\Node $node)
145145
{
146146
if ($node instanceof \PhpParser\Node\Expr\New_) {
147147
if ($node->class instanceof \PhpParser\Node\Name) {
148-
$class = $node->class->getAttribute('resolvedName')->name;
148+
$class = NodeUtil::className($node->class);
149149

150150
if (in_array($class, ['Flarum\Extend\ApiSerializer', 'Flarum\Extend\ApiController', 'Flarum\Foundation\AbstractValidator'])) {
151151
$parent = $node->getAttribute('parent');

php-subsystem/src/Upgrade/TwoPointOh/Search.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public function enterNode(Node $node)
146146
$expr = $node->stmts[0]->expr;
147147

148148
if ($expr instanceof Node\Expr\StaticCall) {
149-
$model = $expr->class->getAttribute('resolvedName')->name;
149+
$model = NodeUtil::className($expr->class);
150150
$this->data['repositories'][$class]['model'] = $model;
151151
}
152152
}
@@ -173,7 +173,7 @@ public function enterNode(Node $node)
173173
if ($expr instanceof Node\Expr\MethodCall && $expr->var instanceof Node\Expr\PropertyFetch && isset($this->map[$expr->var->name->name])) {
174174
$this->data['searchers'][$fqnClass]['repository'] = $this->map[$expr->var->name->name];
175175
} elseif ($expr instanceof Node\Expr\MethodCall && $expr->var instanceof Node\Expr\StaticCall) {
176-
$model = $expr->var->class->getAttribute('resolvedName')->name;
176+
$model = NodeUtil::className($expr->var->class);
177177
$this->data['searchers'][$fqnClass]['model'] = $model;
178178
}
179179
}
@@ -271,7 +271,7 @@ public function leaveNode(Node $node)
271271
}
272272

273273
if ($class === 'Flarum\Extend\Filter') {
274-
$filterer = $new->args[0]->value->class->getAttribute('resolvedName')->name;
274+
$filterer = NodeUtil::className($new->args[0]->value->class);
275275

276276
if ($filterer === 'Flarum\\Discussion\\Filter\\DiscussionFilterer') {
277277
$searcher = 'Flarum\\Discussion\\Search\\DiscussionSearcher';
@@ -297,7 +297,7 @@ public function leaveNode(Node $node)
297297
$this->data['searchers'][$searcher]['mutators'][] = $arg->value;
298298
}
299299
} elseif ($class === 'Flarum\Extend\SimpleFlarumSearch') {
300-
$searcher = $new->args[0]->value->class->getAttribute('resolvedName')->name;
300+
$searcher = NodeUtil::className($new->args[0]->value->class);
301301

302302
$arg = $node->args[0];
303303

0 commit comments

Comments
 (0)