mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-25 20:23:49 +01:00
Updated Rector to commit d3abaa1d05318488f8c1f401fc46a9e48b056d4f
d3abaa1d05
[TypeDeclaration] Handle Anonymous class extends existing class in union (#3161)
This commit is contained in:
parent
80576040f6
commit
7bd500a158
@ -12,6 +12,7 @@ use PHPStan\Type\Generic\TemplateObjectWithoutClassType;
|
||||
use PHPStan\Type\ObjectWithoutClassType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\BetterPhpDocParser\ValueObject\Type\EmptyGenericTypeNode;
|
||||
use Rector\BetterPhpDocParser\ValueObject\Type\FullyQualifiedIdentifierTypeNode;
|
||||
use Rector\Core\Php\PhpVersionProvider;
|
||||
use Rector\Core\ValueObject\PhpVersionFeature;
|
||||
use Rector\NodeTypeResolver\PHPStan\ObjectWithoutClassTypeWithParentTypes;
|
||||
@ -50,6 +51,14 @@ final class ObjectWithoutClassTypeMapper implements TypeMapperInterface
|
||||
$attributeAwareIdentifierTypeNode = new IdentifierTypeNode($type->getName());
|
||||
return new EmptyGenericTypeNode($attributeAwareIdentifierTypeNode);
|
||||
}
|
||||
// special case for anonymous classes that implement another type
|
||||
if ($type instanceof ObjectWithoutClassTypeWithParentTypes) {
|
||||
$parentTypes = $type->getParentTypes();
|
||||
if (\count($parentTypes) === 1) {
|
||||
$parentType = $parentTypes[0];
|
||||
return new FullyQualifiedIdentifierTypeNode($parentType->getClassName());
|
||||
}
|
||||
}
|
||||
return new IdentifierTypeNode('object');
|
||||
}
|
||||
/**
|
||||
|
@ -10,6 +10,7 @@ use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\Type;
|
||||
use PHPStan\Type\TypeCombinator;
|
||||
use PHPStan\Type\UnionType;
|
||||
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
||||
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
|
||||
use Rector\Core\Contract\Rector\AllowEmptyConfigurableRectorInterface;
|
||||
use Rector\Core\Php\PhpVersionProvider;
|
||||
@ -138,16 +139,16 @@ CODE_SAMPLE
|
||||
$typeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($inferredType, TypeKind::PROPERTY);
|
||||
if ($typeNode === null) {
|
||||
$this->phpDocTypeChanger->changeVarType($phpDocInfo, $inferredType);
|
||||
return $node;
|
||||
return $this->processChangedPhpDocInfo($phpDocInfo, $node);
|
||||
}
|
||||
if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::TYPED_PROPERTIES)) {
|
||||
$this->phpDocTypeChanger->changeVarType($phpDocInfo, $inferredType);
|
||||
return $node;
|
||||
return $this->processChangedPhpDocInfo($phpDocInfo, $node);
|
||||
}
|
||||
// non-private property can be anything with not inline public configured
|
||||
if (!$node->isPrivate() && !$this->inlinePublic) {
|
||||
$this->phpDocTypeChanger->changeVarType($phpDocInfo, $inferredType);
|
||||
return $node;
|
||||
return $this->processChangedPhpDocInfo($phpDocInfo, $node);
|
||||
}
|
||||
if ($inferredType instanceof UnionType) {
|
||||
$this->propertyTypeDecorator->decoratePropertyUnionType($inferredType, $typeNode, $node, $phpDocInfo);
|
||||
@ -157,6 +158,13 @@ CODE_SAMPLE
|
||||
$this->varTagRemover->removeVarTagIfUseless($phpDocInfo, $node);
|
||||
return $node;
|
||||
}
|
||||
private function processChangedPhpDocInfo(PhpDocInfo $phpDocInfo, Node $node) : ?Node
|
||||
{
|
||||
if ($phpDocInfo->hasChanged()) {
|
||||
return $node;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private function decorateTypeWithNullableIfDefaultPropertyNull(Property $property, Type $inferredType) : Type
|
||||
{
|
||||
$defaultExpr = $property->props[0]->default;
|
||||
|
@ -17,12 +17,12 @@ final class VersionResolver
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = '91ebee8f0771ec3dbfbb1108e996ecf2351e6e9a';
|
||||
public const PACKAGE_VERSION = 'd3abaa1d05318488f8c1f401fc46a9e48b056d4f';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2022-12-06 17:24:48';
|
||||
public const RELEASE_DATE = '2022-12-06 14:07:43';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95::getLoader();
|
||||
return ComposerAutoloaderInitfeaa61d1178cf36daa1000bff0cefb75::getLoader();
|
||||
|
14
vendor/composer/autoload_real.php
vendored
14
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95
|
||||
class ComposerAutoloaderInitfeaa61d1178cf36daa1000bff0cefb75
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@ -22,19 +22,19 @@ class ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInitfeaa61d1178cf36daa1000bff0cefb75', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitfeaa61d1178cf36daa1000bff0cefb75', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit18e07a90b8778f48b3b664108320cf95::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInit18e07a90b8778f48b3b664108320cf95::$files;
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75::$files;
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequire18e07a90b8778f48b3b664108320cf95($fileIdentifier, $file);
|
||||
composerRequirefeaa61d1178cf36daa1000bff0cefb75($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
@ -46,7 +46,7 @@ class ComposerAutoloaderInit18e07a90b8778f48b3b664108320cf95
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
function composerRequire18e07a90b8778f48b3b664108320cf95($fileIdentifier, $file)
|
||||
function composerRequirefeaa61d1178cf36daa1000bff0cefb75($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
@ -4,7 +4,7 @@
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit18e07a90b8778f48b3b664108320cf95
|
||||
class ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75
|
||||
{
|
||||
public static $files = array (
|
||||
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
|
||||
@ -3020,9 +3020,9 @@ class ComposerStaticInit18e07a90b8778f48b3b664108320cf95
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit18e07a90b8778f48b3b664108320cf95::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit18e07a90b8778f48b3b664108320cf95::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit18e07a90b8778f48b3b664108320cf95::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitfeaa61d1178cf36daa1000bff0cefb75::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user