diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index e89503f7..dbc6ad60 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -104,3 +104,8 @@ parameters: message: "#^Call to an undefined method PHPStan\\\\Type\\\\Type\\:\\:getValue\\(\\)\\.$#" count: 1 path: src/Drupal9/Rector/Deprecation/ExtensionPathRector.php + + - + message: "#^Doing instanceof PHPStan\\\\Type\\\\ObjectType is error\\-prone and deprecated\\. Use Type\\:\\:isObject\\(\\) or Type\\:\\:getObjectClassNames\\(\\) instead\\.$#" + count: 1 + path: src/Rector/Class_/FunctionalTestDefaultThemePropertyRector.php diff --git a/src/Rector/Class_/FunctionalTestDefaultThemePropertyRector.php b/src/Rector/Class_/FunctionalTestDefaultThemePropertyRector.php index 7fe3eeeb..aeba2ead 100644 --- a/src/Rector/Class_/FunctionalTestDefaultThemePropertyRector.php +++ b/src/Rector/Class_/FunctionalTestDefaultThemePropertyRector.php @@ -8,6 +8,7 @@ use PhpParser\Builder\Property; use PhpParser\Node; use PHPStan\Analyser\Scope; +use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Type\ObjectType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Core\Exception\ShouldNotHappenException; @@ -24,19 +25,19 @@ final class FunctionalTestDefaultThemePropertyRector extends AbstractScopeAwareRector { /** - * @var \Rector\Core\PhpParser\Node\Value\ValueResolver + * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ - private ValueResolver $valueResolver; + private PhpDocInfoFactory $phpDocInfoFactory; /** - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory + * @var \Rector\Core\PhpParser\Node\Value\ValueResolver */ - private PhpDocInfoFactory $phpDocInfoFactory; + private ValueResolver $valueResolver; public function __construct(ValueResolver $valueResolver, PhpDocInfoFactory $phpDocInfoFactory) { - $this->valueResolver = $valueResolver; $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->valueResolver = $valueResolver; } public function getRuleDefinition(): RuleDefinition @@ -76,9 +77,12 @@ public function refactorWithScope(Node $node, Scope $scope): ?Node return null; } $type = $this->nodeTypeResolver->getType($node); - if (!$type instanceof ObjectType) { - throw new ShouldNotHappenException(__CLASS__.' type for node was not '.ObjectType::class); + + if(count($type->getObjectClassNames()) === 0 || !$type->isObject()->yes()) { + return null; } + + assert($type instanceof ObjectType); $browserTestBaseType = new ObjectType(BrowserTestBase::class); if ($type->isSmallerThanOrEqual($browserTestBaseType)->yes()) { return null; @@ -92,10 +96,13 @@ public function refactorWithScope(Node $node, Scope $scope): ?Node } $defaultThemeProperty = $classReflection->getProperty('defaultTheme', $scope); + assert($defaultThemeProperty instanceof \PHPStan\Reflection\Php\PhpPropertyReflection); + $reflectionProperty = $defaultThemeProperty->getNativeReflection(); $betterReflection = $reflectionProperty->getBetterReflection(); $defaultValueExpression = $betterReflection->getDefaultValueExpression(); + if ($defaultValueExpression instanceof Node\Scalar\String_ && strlen($this->valueResolver->getValue($defaultValueExpression)) > 0) { return null; }