From 7c60f5245001b331b6a52b7799bc2b45ddb633e3 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 7 Jun 2019 14:07:48 +0200 Subject: [PATCH] skip analysis of new anonymous classes in method call [closes #1574] --- packages/NodeTypeResolver/src/NodeTypeResolver.php | 9 ++++++++- .../Fixture/skip_anonymous_class.php.inc | 14 ++++++++++++++ .../StringToArrayArgumentProcessRectorTest.php | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/Fixture/skip_anonymous_class.php.inc diff --git a/packages/NodeTypeResolver/src/NodeTypeResolver.php b/packages/NodeTypeResolver/src/NodeTypeResolver.php index cb37f72cbb02..a6020dd65aaa 100644 --- a/packages/NodeTypeResolver/src/NodeTypeResolver.php +++ b/packages/NodeTypeResolver/src/NodeTypeResolver.php @@ -406,7 +406,14 @@ private function resolveFirstTypes(Node $node): array return []; } - // PHPStan + // skip anonymous classes, ref https://github.com/rectorphp/rector/issues/1574 + if ($node instanceof Expr\New_) { + $className = $this->nameResolver->resolve($node->class); + if ($className === null || Strings::contains($className, 'AnonymousClass')) { + return []; + } + } + $type = $nodeScope->getType($node); $typesInStrings = $this->typeToStringResolver->resolve($type); diff --git a/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/Fixture/skip_anonymous_class.php.inc b/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/Fixture/skip_anonymous_class.php.inc new file mode 100644 index 000000000000..197e22240a6d --- /dev/null +++ b/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/Fixture/skip_anonymous_class.php.inc @@ -0,0 +1,14 @@ +add( + new class() { + } + ); + } +} diff --git a/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/StringToArrayArgumentProcessRectorTest.php b/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/StringToArrayArgumentProcessRectorTest.php index b980367afaa4..1e881352f8c1 100644 --- a/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/StringToArrayArgumentProcessRectorTest.php +++ b/packages/Symfony/tests/Rector/New_/StringToArrayArgumentProcessRector/StringToArrayArgumentProcessRectorTest.php @@ -17,6 +17,7 @@ public function test(): void __DIR__ . '/Fixture/fixture3.php.inc', __DIR__ . '/Fixture/fixture4.php.inc', __DIR__ . '/Fixture/with_sprintf.php.inc', + __DIR__ . '/Fixture/skip_anonymous_class.php.inc', ]); }