rector/packages/NodeTypeResolver/PHPStan/Scope/TraitScopeFaker.php
Abdul Malik Ikhsan fc10fce13d
[Rectify] [Php81] Enable Rectify on Readonly Property only (#1384)
* re-enable rectify and ecs

* [Rectify] [Php81] Enable Rectify on Readonly Property only

* comment

* [ci-review] Rector Rectify

* [ci-review] Rector Rectify

* [ci-review] Rector Rectify

* [ci-review] Rector Rectify

* [ci-review] Rector Rectify

Co-authored-by: GitHub Action <action@github.com>
2021-12-04 15:32:52 +03:00

33 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Rector\NodeTypeResolver\PHPStan\Scope;
use PHPStan\Analyser\MutatingScope;
use PHPStan\Analyser\ScopeContext;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Stubs\DummyTraitClass;
use Symplify\PackageBuilder\Reflection\PrivatesAccessor;
final class TraitScopeFaker
{
public function __construct(
private readonly PrivatesAccessor $privatesAccessor,
private readonly ReflectionProvider $reflectionProvider
) {
}
public function createDummyClassScopeContext(MutatingScope $mutatingScope): ScopeContext
{
// this has to be faked, because trait PHPStan does not traverse trait without a class
/** @var ScopeContext $scopeContext */
$scopeContext = $this->privatesAccessor->getPrivateProperty($mutatingScope, 'context');
$dummyClassReflection = $this->reflectionProvider->getClass(DummyTraitClass::class);
// faking a class reflection
return ScopeContext::create($scopeContext->getFile())
->enterClass($dummyClassReflection);
}
}