Updated Rector to commit c3e5507d9a

c3e5507d9a [PhpSpecToPHPUnit] Restore PhpSpecToPHPUnitRector behaviour on namespaced name usage (#1163)
This commit is contained in:
Tomas Votruba 2021-11-06 02:59:53 +00:00
parent bf8d644cbf
commit abfdf7ea49
33 changed files with 168 additions and 143 deletions

View File

@ -97,7 +97,7 @@ final class PhpSpecMockCollector
if ($param->type === null) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$paramType = (string) ($param->type->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::ORIGINAL_NAME) ?: $param->type);
$paramType = (string) ($param->type ?? $param->type->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::ORIGINAL_NAME));
$this->mocksWithsTypes[$class][$variable] = $paramType;
}
}

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = 'c31cabf0b3a67d59000824836fa5fc42ec1a2d2f';
public const PACKAGE_VERSION = 'c3e5507d9af450918601192c23d3e2f67a4d73d0';
/**
* @var string
*/
public const RELEASE_DATE = '2021-11-06 07:36:41';
public const RELEASE_DATE = '2021-11-06 09:42:38';
public static function resolvePackageVersion() : string
{
$process = new \RectorPrefix20211106\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__);

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2::getLoader();
return ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2
class ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,19 +42,19 @@ class ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2::$files;
$includeFiles = Composer\Autoload\ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire09fbddd487546fa01a502d9e2456d4f2($fileIdentifier, $file);
composerRequire00e84f5e71ac5f23c422bd43da86e7d4($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire09fbddd487546fa01a502d9e2456d4f2($fileIdentifier, $file)
function composerRequire00e84f5e71ac5f23c422bd43da86e7d4($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2
class ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@ -3522,9 +3522,9 @@ class ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit09fbddd487546fa01a502d9e2456d4f2::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit00e84f5e71ac5f23c422bd43da86e7d4::$classMap;
}, null, ClassLoader::class);
}

View File

@ -1335,17 +1335,17 @@
},
{
"name": "rector\/rector-doctrine",
"version": "0.11.29",
"version_normalized": "0.11.29.0",
"version": "0.11.30",
"version_normalized": "0.11.30.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git",
"reference": "162bf21093c834e9321a7444a0b5d4099a7716c2"
"reference": "bfb6998e238a4d788ddb4ef765a4cf552c282090"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/162bf21093c834e9321a7444a0b5d4099a7716c2",
"reference": "162bf21093c834e9321a7444a0b5d4099a7716c2",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/bfb6998e238a4d788ddb4ef765a4cf552c282090",
"reference": "bfb6998e238a4d788ddb4ef765a4cf552c282090",
"shasum": ""
},
"require": {
@ -1368,7 +1368,7 @@
"symplify\/phpstan-rules": "^10.0",
"symplify\/rule-doc-generator": "^10.0"
},
"time": "2021-11-04T12:26:52+00:00",
"time": "2021-11-06T01:07:33+00:00",
"type": "rector-extension",
"extra": {
"branch-alias": {
@ -1393,23 +1393,23 @@
"description": "Rector upgrades rules for Doctrine",
"support": {
"issues": "https:\/\/github.com\/rectorphp\/rector-doctrine\/issues",
"source": "https:\/\/github.com\/rectorphp\/rector-doctrine\/tree\/0.11.29"
"source": "https:\/\/github.com\/rectorphp\/rector-doctrine\/tree\/0.11.30"
},
"install-path": "..\/rector\/rector-doctrine"
},
{
"name": "rector\/rector-laravel",
"version": "0.11.10",
"version_normalized": "0.11.10.0",
"version": "0.11.11",
"version_normalized": "0.11.11.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-laravel.git",
"reference": "14a7334e4d8e687eeff1b77f71da7c0dad001d8b"
"reference": "63bb1e3916fb3539413f531aa32bab69146dd685"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-laravel\/zipball\/14a7334e4d8e687eeff1b77f71da7c0dad001d8b",
"reference": "14a7334e4d8e687eeff1b77f71da7c0dad001d8b",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-laravel\/zipball\/63bb1e3916fb3539413f531aa32bab69146dd685",
"reference": "63bb1e3916fb3539413f531aa32bab69146dd685",
"shasum": ""
},
"require": {
@ -1431,7 +1431,7 @@
"symplify\/phpstan-rules": "^10.0",
"symplify\/rule-doc-generator": "^10.0"
},
"time": "2021-11-02T22:45:02+00:00",
"time": "2021-11-06T01:21:06+00:00",
"type": "rector-extension",
"extra": {
"branch-alias": {
@ -1456,23 +1456,23 @@
"description": "Rector upgrades rules for Laravel Framework",
"support": {
"issues": "https:\/\/github.com\/rectorphp\/rector-laravel\/issues",
"source": "https:\/\/github.com\/rectorphp\/rector-laravel\/tree\/0.11.10"
"source": "https:\/\/github.com\/rectorphp\/rector-laravel\/tree\/0.11.11"
},
"install-path": "..\/rector\/rector-laravel"
},
{
"name": "rector\/rector-nette",
"version": "0.11.45",
"version_normalized": "0.11.45.0",
"version": "0.11.46",
"version_normalized": "0.11.46.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-nette.git",
"reference": "1467f8b441aea404def5776e8b908124b8bb9a96"
"reference": "e6406acab409e80b1258b0c292cdbf2a3a79365f"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-nette\/zipball\/1467f8b441aea404def5776e8b908124b8bb9a96",
"reference": "1467f8b441aea404def5776e8b908124b8bb9a96",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-nette\/zipball\/e6406acab409e80b1258b0c292cdbf2a3a79365f",
"reference": "e6406acab409e80b1258b0c292cdbf2a3a79365f",
"shasum": ""
},
"require": {
@ -1500,7 +1500,7 @@
"symplify\/phpstan-rules": "^10.0",
"symplify\/rule-doc-generator": "^10.0"
},
"time": "2021-11-04T12:26:58+00:00",
"time": "2021-11-06T01:21:50+00:00",
"type": "rector-extension",
"extra": {
"branch-alias": {
@ -1528,7 +1528,7 @@
"description": "Rector upgrades rules for Nette Framework",
"support": {
"issues": "https:\/\/github.com\/rectorphp\/rector-nette\/issues",
"source": "https:\/\/github.com\/rectorphp\/rector-nette\/tree\/0.11.45"
"source": "https:\/\/github.com\/rectorphp\/rector-nette\/tree\/0.11.46"
},
"install-path": "..\/rector\/rector-nette"
},
@ -1596,17 +1596,17 @@
},
{
"name": "rector\/rector-phpunit",
"version": "0.11.19",
"version_normalized": "0.11.19.0",
"version": "0.11.21",
"version_normalized": "0.11.21.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git",
"reference": "fbb2d71e870dab4e1cf9cb22bae4ecb3ee16421f"
"reference": "b7033b9e4c8c5bed0ae82f828a41fc59ca5d4774"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/fbb2d71e870dab4e1cf9cb22bae4ecb3ee16421f",
"reference": "fbb2d71e870dab4e1cf9cb22bae4ecb3ee16421f",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/b7033b9e4c8c5bed0ae82f828a41fc59ca5d4774",
"reference": "b7033b9e4c8c5bed0ae82f828a41fc59ca5d4774",
"shasum": ""
},
"require": {
@ -1626,7 +1626,7 @@
"symplify\/phpstan-rules": "^10.0",
"symplify\/rule-doc-generator": "^10.0"
},
"time": "2021-11-02T17:17:35+00:00",
"time": "2021-11-06T02:39:15+00:00",
"type": "rector-extension",
"extra": {
"branch-alias": {
@ -1651,23 +1651,23 @@
"description": "Rector upgrades rules for PHPUnit",
"support": {
"issues": "https:\/\/github.com\/rectorphp\/rector-phpunit\/issues",
"source": "https:\/\/github.com\/rectorphp\/rector-phpunit\/tree\/0.11.19"
"source": "https:\/\/github.com\/rectorphp\/rector-phpunit\/tree\/0.11.21"
},
"install-path": "..\/rector\/rector-phpunit"
},
{
"name": "rector\/rector-symfony",
"version": "0.11.36",
"version_normalized": "0.11.36.0",
"version": "0.11.37",
"version_normalized": "0.11.37.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
"reference": "7f13d58733ae96793f47379c8f715ab3dcf598e5"
"reference": "acfb0e9ac4752910dd50a2806be2253c4dd87925"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/7f13d58733ae96793f47379c8f715ab3dcf598e5",
"reference": "7f13d58733ae96793f47379c8f715ab3dcf598e5",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/acfb0e9ac4752910dd50a2806be2253c4dd87925",
"reference": "acfb0e9ac4752910dd50a2806be2253c4dd87925",
"shasum": ""
},
"require": {
@ -1692,7 +1692,7 @@
"symplify\/phpstan-rules": "^10.0",
"symplify\/rule-doc-generator": "^10.0"
},
"time": "2021-11-04T12:44:21+00:00",
"time": "2021-11-06T01:15:43+00:00",
"type": "rector-extension",
"extra": {
"branch-alias": {
@ -1717,7 +1717,7 @@
"description": "Rector upgrades rules for Symfony Framework",
"support": {
"issues": "https:\/\/github.com\/rectorphp\/rector-symfony\/issues",
"source": "https:\/\/github.com\/rectorphp\/rector-symfony\/tree\/0.11.36"
"source": "https:\/\/github.com\/rectorphp\/rector-symfony\/tree\/0.11.37"
},
"install-path": "..\/rector\/rector-symfony"
},

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,7 @@ namespace Rector\RectorInstaller;
*/
final class GeneratedConfig
{
public const EXTENSIONS = array('rector/rector-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.29'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.10'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.45'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.19'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.36'), 'ssch/typo3-rector' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/ssch/typo3-rector', 'relative_install_path' => '../../../ssch/typo3-rector', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'v0.11.30'));
public const EXTENSIONS = array('rector/rector-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.30'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.11'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.46'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.21'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.37'), 'ssch/typo3-rector' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/ssch/typo3-rector', 'relative_install_path' => '../../../ssch/typo3-rector', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'v0.11.30'));
private function __construct()
{
}

View File

@ -11,7 +11,6 @@ use PhpParser\Node\Stmt\Property;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class ConstructorAssignPropertyAnalyzer
{
/**
@ -29,11 +28,11 @@ final class ConstructorAssignPropertyAnalyzer
}
public function resolveConstructorAssign(\PhpParser\Node\Stmt\Property $property) : ?\PhpParser\Node
{
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
$constructClassMethod = $classLike->getMethod(\Rector\Core\ValueObject\MethodName::CONSTRUCT);
$constructClassMethod = $class->getMethod(\Rector\Core\ValueObject\MethodName::CONSTRUCT);
if (!$constructClassMethod instanceof \PhpParser\Node\Stmt\ClassMethod) {
return null;
}

View File

@ -14,9 +14,9 @@ use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\Property;
use PHPStan\Reflection\Php\PhpPropertyReflection;
use PHPStan\Type\ObjectType;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class SetterClassMethodAnalyzer
{
@ -32,11 +32,16 @@ final class SetterClassMethodAnalyzer
* @var \Rector\Core\Reflection\ReflectionResolver
*/
private $reflectionResolver;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\Reflection\ReflectionResolver $reflectionResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\Reflection\ReflectionResolver $reflectionResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
$this->reflectionResolver = $reflectionResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
public function matchNullalbeClassMethodProperty(\PhpParser\Node\Stmt\ClassMethod $classMethod) : ?\PhpParser\Node\Stmt\Property
{
@ -48,12 +53,12 @@ final class SetterClassMethodAnalyzer
if (!$phpPropertyReflection instanceof \PHPStan\Reflection\Php\PhpPropertyReflection) {
return null;
}
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$class instanceof \PhpParser\Node\Stmt\ClassLike) {
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
$propertyName = (string) $this->nodeNameResolver->getName($propertyFetch);
return $class->getProperty($propertyName);
$propertyName = (string) $this->nodeNameResolver->getName($propertyFetch->name);
return $classLike->getProperty($propertyName);
}
/**
* Matches:

View File

@ -8,7 +8,7 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Property;
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\TypeDeclaration\PhpDoc\ShortClassExpander;
final class DoctrineDocBlockResolver
{
@ -20,10 +20,15 @@ final class DoctrineDocBlockResolver
* @var \Rector\TypeDeclaration\PhpDoc\ShortClassExpander
*/
private $shortClassExpander;
public function __construct(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\TypeDeclaration\PhpDoc\ShortClassExpander $shortClassExpander)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\TypeDeclaration\PhpDoc\ShortClassExpander $shortClassExpander, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->shortClassExpander = $shortClassExpander;
$this->betterNodeFinder = $betterNodeFinder;
}
public function isDoctrineEntityClass(\PhpParser\Node\Stmt\Class_ $class) : bool
{
@ -45,10 +50,10 @@ final class DoctrineDocBlockResolver
}
public function isInDoctrineEntityClass(\PhpParser\Node $node) : bool
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
return $this->isDoctrineEntityClass($classLike);
return $this->isDoctrineEntityClass($class);
}
}

View File

@ -116,8 +116,8 @@ CODE_SAMPLE
if ($this->shouldSkipClassMethod($node)) {
return null;
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
// 1. remove parent::__construct()
@ -130,12 +130,12 @@ CODE_SAMPLE
// 3. add $entityManager->getRepository() fetch assign
$repositoryAssign = $this->repositoryNodeFactory->createRepositoryAssign($entityReferenceExpr);
$entityManagerObjectType = new \PHPStan\Type\ObjectType('Doctrine\\ORM\\EntityManagerInterface');
$this->classDependencyManipulator->addConstructorDependencyWithCustomAssign($classLike, 'entityManager', $entityManagerObjectType, $repositoryAssign);
$this->addRepositoryProperty($classLike, $entityReferenceExpr);
$this->classDependencyManipulator->addConstructorDependencyWithCustomAssign($class, 'entityManager', $entityManagerObjectType, $repositoryAssign);
$this->addRepositoryProperty($class, $entityReferenceExpr);
// 5. add param + add property, dependency
$propertyName = $this->propertyNaming->fqnToVariableName($entityManagerObjectType);
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, $entityManagerObjectType, \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE);
$this->propertyToAddCollector->addPropertyToClass($classLike, $propertyMetadata);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
return $node;
}
private function shouldSkipClassMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool

View File

@ -16,7 +16,6 @@ use PHPStan\Type\ObjectType;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Rector\AbstractRector;
use Rector\Defluent\NodeAnalyzer\FluentChainMethodCallNodeAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\TypeAnalyzer\ArrayTypeAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -116,7 +115,7 @@ CODE_SAMPLE
}
private function shouldSkipMethodCall(\PhpParser\Node\Expr\MethodCall $methodCall) : bool
{
$classLike = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \true;
}

View File

@ -12,7 +12,6 @@ use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -112,7 +111,7 @@ CODE_SAMPLE
/** @var MethodCall $parentMethodCall */
$parentMethodCall = $methodCall->var;
if (\count($parentMethodCall->args) === 1) {
$class = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -18,7 +18,6 @@ use Rector\Doctrine\PhpDocParser\DoctrineDocBlockResolver;
use Rector\Doctrine\TypeAnalyzer\CollectionTypeFactory;
use Rector\Doctrine\TypeAnalyzer\CollectionTypeResolver;
use Rector\Doctrine\TypeAnalyzer\CollectionVarTagValueNodeResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -174,12 +173,12 @@ CODE_SAMPLE
if (!$phpPropertyReflection instanceof \PHPStan\Reflection\Php\PhpPropertyReflection) {
return null;
}
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$class instanceof \PhpParser\Node\Stmt\ClassLike) {
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
$propertyName = (string) $this->nodeNameResolver->getName($propertyFetches[0]);
$property = $class->getProperty($propertyName);
$property = $classLike->getProperty($propertyName);
if (!$property instanceof \PhpParser\Node\Stmt\Property) {
return null;
}

View File

@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\Expression;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\Nette\NodeAnalyzer\StaticCallAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -69,7 +68,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}

View File

@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\Expression;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\Nette\NodeAnalyzer\StaticCallAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -69,7 +68,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}

View File

@ -13,7 +13,6 @@ use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType;
use Rector\Core\NodeManipulator\ClassMethodManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -98,8 +97,8 @@ CODE_SAMPLE
if ($node instanceof \PhpParser\Node\Expr\StaticCall) {
return !$this->nodeTypeResolver->isObjectTypes($node->class, $this->requestObjectTypes);
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \true;
}
return !$this->isName($node, 'request');

View File

@ -7,6 +7,7 @@ use PhpParser\Node;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\ValueObject\MethodName;
use Rector\Nette\Contract\FormControlTypeResolverInterface;
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
@ -23,9 +24,14 @@ final class ThisVariableInAnotherMethodFormControlTypeResolver implements \Recto
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @required
@ -51,11 +57,11 @@ final class ThisVariableInAnotherMethodFormControlTypeResolver implements \Recto
if ($this->nodeNameResolver->isName($classMethod, \Rector\Core\ValueObject\MethodName::CONSTRUCT)) {
return [];
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return [];
}
$constructorClassMethod = $classLike->getMethod(\Rector\Core\ValueObject\MethodName::CONSTRUCT);
$constructorClassMethod = $class->getMethod(\Rector\Core\ValueObject\MethodName::CONSTRUCT);
if ($constructorClassMethod === null) {
return [];
}

View File

@ -6,8 +6,8 @@ namespace Rector\Nette\Kdyby\NodeAnalyzer;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\ObjectType;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class GetSubscribedEventsClassMethodAnalyzer
{
@ -19,14 +19,19 @@ final class GetSubscribedEventsClassMethodAnalyzer
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
public function detect(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}

View File

@ -9,11 +9,11 @@ use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\Nette\Kdyby\Naming\EventClassNaming;
use Rector\Nette\Kdyby\ValueObject\EventClassAndClassMethod;
use Rector\Nette\Kdyby\ValueObject\NetteEventToContributeEventClass;
use Rector\NodeTypeResolver\Node\AttributeKey;
use RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;
final class ListeningMethodsCollector
{
@ -41,22 +41,29 @@ final class ListeningMethodsCollector
* @var \Rector\Core\PhpParser\Node\Value\ValueResolver
*/
private $valueResolver;
public function __construct(\RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\Nette\Kdyby\Naming\EventClassNaming $eventClassNaming, \Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\Nette\Kdyby\Naming\EventClassNaming $eventClassNaming, \Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->eventClassNaming = $eventClassNaming;
$this->valueResolver = $valueResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @return EventClassAndClassMethod[]
*/
public function collectFromClassAndGetSubscribedEventClassMethod(\PhpParser\Node\Stmt\ClassMethod $getSubscribedEventsClassMethod, string $type) : array
{
/** @var Class_ $classLike */
$classLike = $getSubscribedEventsClassMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($getSubscribedEventsClassMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return [];
}
$this->eventClassesAndClassMethods = [];
$this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $getSubscribedEventsClassMethod->stmts, function (\PhpParser\Node $node) use($classLike, $type) {
$classMethod = $this->matchClassMethodByArrayItem($node, $classLike);
$this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $getSubscribedEventsClassMethod->stmts, function (\PhpParser\Node $node) use($class, $type) {
$classMethod = $this->matchClassMethodByArrayItem($node, $class);
if (!$classMethod instanceof \PhpParser\Node\Stmt\ClassMethod) {
return null;
}
@ -75,7 +82,7 @@ final class ListeningMethodsCollector
$this->resolveContributeEventClassAndSubscribedClassMethod($eventClass, $classMethod);
return null;
}
$eventClassAndClassMethod = $this->resolveCustomClassMethodAndEventClass($node, $classLike, $eventClass);
$eventClassAndClassMethod = $this->resolveCustomClassMethodAndEventClass($node, $class, $eventClass);
if (!$eventClassAndClassMethod instanceof \Rector\Nette\Kdyby\ValueObject\EventClassAndClassMethod) {
return null;
}

View File

@ -6,7 +6,7 @@ namespace Rector\Nette\NodeAnalyzer;
use PhpParser\Node;
use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class NetteClassAnalyzer
{
@ -14,16 +14,21 @@ final class NetteClassAnalyzer
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeTypeResolver = $nodeTypeResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
public function isInComponent(\PhpParser\Node $node) : bool
{
if ($node instanceof \PhpParser\Node\Stmt\Class_) {
$class = $node;
} else {
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
}
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;

View File

@ -8,12 +8,10 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Property;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Nette\NodeAnalyzer\PropertyUsageAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -105,17 +103,13 @@ CODE_SAMPLE
if (!$constructClassMethod instanceof \PhpParser\Node\Stmt\ClassMethod) {
return null;
}
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
foreach ($injectProperties as $injectProperty) {
$this->removeInjectAnnotation($injectProperty);
$this->changePropertyVisibility($injectProperty);
$propertyName = $this->nodeNameResolver->getName($injectProperty);
$propertyType = $this->nodeTypeResolver->getType($injectProperty);
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, $propertyType, $injectProperty->flags);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
$this->propertyToAddCollector->addPropertyToClass($node, $propertyMetadata);
if ($this->phpVersionProvider->isAtLeastPhpVersion(\Rector\Core\ValueObject\PhpVersionFeature::PROPERTY_PROMOTION)) {
$this->removeNode($injectProperty);
}

View File

@ -13,7 +13,6 @@ use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Nette\NodeAnalyzer\NetteInjectPropertyAnalyzer;
use Rector\Nette\NodeAnalyzer\PropertyUsageAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -103,7 +102,7 @@ CODE_SAMPLE
$this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $injectTagNode);
}
$this->changePropertyVisibility($property);
$class = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}

View File

@ -10,8 +10,8 @@ use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\ObjectType;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class TestsNodeAnalyzer
{
@ -31,16 +31,21 @@ final class TestsNodeAnalyzer
* @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory
*/
private $phpDocInfoFactory;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->betterNodeFinder = $betterNodeFinder;
$this->testCaseObjectTypes = [new \PHPStan\Type\ObjectType('PHPUnit\\Framework\\TestCase'), new \PHPStan\Type\ObjectType('PHPUnit_Framework_TestCase')];
}
public function isInTestClass(\PhpParser\Node $node) : bool
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $node instanceof \PhpParser\Node\Stmt\ClassLike ? $node : $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}

View File

@ -8,9 +8,9 @@ use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\Naming\Naming\PropertyNaming;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
final class DependencyInjectionMethodCallAnalyzer
@ -31,12 +31,17 @@ final class DependencyInjectionMethodCallAnalyzer
* @var \Rector\PostRector\Collector\PropertyToAddCollector
*/
private $propertyToAddCollector;
public function __construct(\Rector\Naming\Naming\PropertyNaming $propertyNaming, \Rector\Symfony\NodeAnalyzer\ServiceTypeMethodCallResolver $serviceTypeMethodCallResolver, \Rector\Core\PhpParser\Node\NodeFactory $nodeFactory, \Rector\PostRector\Collector\PropertyToAddCollector $propertyToAddCollector)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\Naming\Naming\PropertyNaming $propertyNaming, \Rector\Symfony\NodeAnalyzer\ServiceTypeMethodCallResolver $serviceTypeMethodCallResolver, \Rector\Core\PhpParser\Node\NodeFactory $nodeFactory, \Rector\PostRector\Collector\PropertyToAddCollector $propertyToAddCollector, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->propertyNaming = $propertyNaming;
$this->serviceTypeMethodCallResolver = $serviceTypeMethodCallResolver;
$this->nodeFactory = $nodeFactory;
$this->propertyToAddCollector = $propertyToAddCollector;
$this->betterNodeFinder = $betterNodeFinder;
}
public function replaceMethodCallWithPropertyFetchAndDependency(\PhpParser\Node\Expr\MethodCall $methodCall) : ?\PhpParser\Node\Expr\PropertyFetch
{
@ -44,13 +49,13 @@ final class DependencyInjectionMethodCallAnalyzer
if (!$serviceType instanceof \PHPStan\Type\ObjectType) {
return null;
}
$classLike = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$propertyName = $this->propertyNaming->fqnToVariableName($serviceType);
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, $serviceType, \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE);
$this->propertyToAddCollector->addPropertyToClass($classLike, $propertyMetadata);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
return $this->nodeFactory->createPropertyFetch('this', $propertyName);
}
}

View File

@ -64,11 +64,11 @@ CODE_SAMPLE
if (!$this->isName($node, 'execute')) {
return null;
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
if (!$this->isObjectType($classLike, new \PHPStan\Type\ObjectType('Symfony\\Component\\Console\\Command\\Command'))) {
if (!$this->isObjectType($class, new \PHPStan\Type\ObjectType('Symfony\\Component\\Console\\Command\\Command'))) {
return null;
}
$this->refactorReturnTypeDeclaration($node);

View File

@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Symfony\FormHelper\FormTypeStringToTypeProvider;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -107,11 +106,11 @@ CODE_SAMPLE
}
private function isClassAndMethodMatch(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
if ($this->isObjectType($classLike, new \PHPStan\Type\ObjectType('Symfony\\Component\\Form\\AbstractType'))) {
if ($this->isObjectType($class, new \PHPStan\Type\ObjectType('Symfony\\Component\\Form\\AbstractType'))) {
return $this->isName($classMethod->name, 'getParent');
}
if ($this->isObjectType($classMethod, new \PHPStan\Type\ObjectType('Symfony\\Component\\Form\\AbstractTypeExtension'))) {

View File

@ -10,7 +10,6 @@ use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover;
use Rector\BetterPhpDocParser\Printer\PhpDocInfoPrinter;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -78,7 +77,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}

View File

@ -83,8 +83,8 @@ CODE_SAMPLE
}
private function isObjectMethodNameMatch(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
if (!$this->isObjectType($classMethod, new \PHPStan\Type\ObjectType('Symfony\\Component\\Form\\AbstractType'))) {

View File

@ -14,7 +14,6 @@ use PHPStan\Type\StringType;
use PHPStan\Type\TypeWithClassName;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\PropertyNaming;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -105,12 +104,12 @@ CODE_SAMPLE
$parameterName = $stringArgument->value;
$parameterName = \RectorPrefix20211106\Nette\Utils\Strings::replace($parameterName, '#\\.#', '_');
$propertyName = $this->propertyNaming->underscoreToName($parameterName);
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, new \PHPStan\Type\StringType(), \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE);
$this->propertyToAddCollector->addPropertyToClass($classLike, $propertyMetadata);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
return $this->nodeFactory->createPropertyFetch('this', $propertyName);
}
}

View File

@ -12,7 +12,6 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Property;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -66,7 +65,7 @@ CODE_SAMPLE
}
private function getSwiftMailerProperty(\PhpParser\Node\Expr\MethodCall $classMethod) : ?\PhpParser\Node\Stmt\Property
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -9,8 +9,8 @@ $loader = require_once __DIR__.'/autoload.php';
if (!class_exists('AutoloadIncluder', false) && !interface_exists('AutoloadIncluder', false) && !trait_exists('AutoloadIncluder', false)) {
spl_autoload_call('RectorPrefix20211106\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2', false) && !interface_exists('ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2', false) && !trait_exists('ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2', false)) {
spl_autoload_call('RectorPrefix20211106\ComposerAutoloaderInit09fbddd487546fa01a502d9e2456d4f2');
if (!class_exists('ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4', false) && !interface_exists('ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4', false) && !trait_exists('ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4', false)) {
spl_autoload_call('RectorPrefix20211106\ComposerAutoloaderInit00e84f5e71ac5f23c422bd43da86e7d4');
}
if (!class_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !interface_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !trait_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false)) {
spl_autoload_call('RectorPrefix20211106\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -3306,9 +3306,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20211106\print_node(...func_get_args());
}
}
if (!function_exists('composerRequire09fbddd487546fa01a502d9e2456d4f2')) {
function composerRequire09fbddd487546fa01a502d9e2456d4f2() {
return \RectorPrefix20211106\composerRequire09fbddd487546fa01a502d9e2456d4f2(...func_get_args());
if (!function_exists('composerRequire00e84f5e71ac5f23c422bd43da86e7d4')) {
function composerRequire00e84f5e71ac5f23c422bd43da86e7d4() {
return \RectorPrefix20211106\composerRequire00e84f5e71ac5f23c422bd43da86e7d4(...func_get_args());
}
}
if (!function_exists('parseArgs')) {