From 51af35a71e832448c7732bf21c3c3714e4b2d9df Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 2 Feb 2026 14:40:01 +0100 Subject: [PATCH] skip abstract entity and interface, as cannot be instantiated --- .../Fixture/skip_abstract_entity.php.inc | 15 +++++++++++++ .../Source/AbstractEntityToBeConfigured.php | 21 +++++++++++++++++++ ...nfiguredMockEntityToSetterObjectRector.php | 7 ++++++- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Fixture/skip_abstract_entity.php.inc create mode 100644 rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Source/AbstractEntityToBeConfigured.php diff --git a/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Fixture/skip_abstract_entity.php.inc b/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Fixture/skip_abstract_entity.php.inc new file mode 100644 index 00000000..87a7054a --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Fixture/skip_abstract_entity.php.inc @@ -0,0 +1,15 @@ +createConfiguredMock(AbstractEntityToBeConfigured::class, [ + 'getName'=> 'John', + ]); + } +} diff --git a/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Source/AbstractEntityToBeConfigured.php b/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Source/AbstractEntityToBeConfigured.php new file mode 100644 index 00000000..62198c7b --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector/Source/AbstractEntityToBeConfigured.php @@ -0,0 +1,21 @@ +name = $name; + } + + public function getName(): string + { + return $this->name; + } +} diff --git a/rules/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector.php b/rules/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector.php index 280214e0..b720f363 100644 --- a/rules/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector.php +++ b/rules/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector.php @@ -4,7 +4,6 @@ namespace Rector\PHPUnit\CodeQuality\Rector\Expression; -use PhpParser\Node\Stmt\Class_; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr; @@ -13,6 +12,7 @@ use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; use PhpParser\Node\Name\FullyQualified; +use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Expression; use PHPStan\Reflection\ReflectionProvider; use Rector\Doctrine\NodeAnalyzer\DoctrineEntityDetector; @@ -175,6 +175,11 @@ private function matchDoctrineClassName(Expr $expr): string|null return null; } + $classReflection = $this->reflectionProvider->getClass($mockedClassValue); + if ($classReflection->isInterface() || $classReflection->isAbstract()) { + return null; + } + $mockedClass = $this->astResolver->resolveClassFromName($mockedClassValue); if (! $mockedClass instanceof Class_) { return null;