mirror of
https://github.com/rectorphp/rector.git
synced 2025-03-14 04:19:44 +01:00
Turn InterfaceTypeResolver to BetterReflection
This commit is contained in:
parent
915fec0ff8
commit
12c3909ea3
@ -109,9 +109,9 @@ final class PHPStanNodeScopeResolver
|
||||
$scope = $scope->enterClass($this->phpstanBroker->getClass((string) $node->namespacedName));
|
||||
} else {
|
||||
// possibly anonymous class
|
||||
$privatesAccessor = (new PrivatesAccessor);
|
||||
$anonymousClassReflection = $privatesAccessor->getPrivateProperty(
|
||||
$this->nodeScopeResolver, 'anonymousClassReflection'
|
||||
$anonymousClassReflection = (new PrivatesAccessor())->getPrivateProperty(
|
||||
$this->nodeScopeResolver,
|
||||
'anonymousClassReflection'
|
||||
);
|
||||
|
||||
if ($anonymousClassReflection) {
|
||||
|
@ -4,10 +4,8 @@ namespace Rector\NodeTypeResolver\PerNodeTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use Rector\Node\Attribute;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
use Roave\BetterReflection\Reflection\ReflectionClass;
|
||||
|
||||
final class TraitTypeResolver implements PerNodeTypeResolverInterface
|
||||
{
|
||||
@ -25,16 +23,15 @@ final class TraitTypeResolver implements PerNodeTypeResolverInterface
|
||||
*/
|
||||
public function resolve(Node $traitNode): array
|
||||
{
|
||||
/** @var Scope $traitNodeScope */
|
||||
$traitNodeScope = $traitNode->getAttribute(Attribute::SCOPE);
|
||||
$traitReflection = ReflectionClass::createFromName((string) $traitNode->namespacedName);
|
||||
|
||||
/** @var ClassReflection $classReflection */
|
||||
$classReflection = $traitNodeScope->getClassReflection();
|
||||
$types = [];
|
||||
$types[] = $traitReflection->getName();
|
||||
|
||||
dump($classReflection);
|
||||
die;
|
||||
foreach ($traitReflection->getTraits() as $usedTraitReflection) {
|
||||
$types[] = $usedTraitReflection->getName();
|
||||
}
|
||||
|
||||
$types[] = $this->resolveNameNode($traitNode);
|
||||
return array_merge($types, $this->resolveUsedTraitTypes($traitNode));
|
||||
return $types;
|
||||
}
|
||||
}
|
||||
|
@ -42,11 +42,11 @@ final class ClassTypeResolverTest extends AbstractNodeTypeResolverTest
|
||||
|
||||
yield [__DIR__ . '/Source/ClassWithTrait.php', 0, [ClassWithTrait::class, AnotherTrait::class]];
|
||||
|
||||
// traits in anonymous classes are ignored in PHPStan
|
||||
yield [
|
||||
__DIR__ . '/Source/AnonymousClass.php',
|
||||
0,
|
||||
[ParentClass::class, SomeInterface::class /*, AnotherTrait::class */],
|
||||
// traits in anonymous classes are ignored in PHPStan
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +93,6 @@ final class PropertyFetchAnalyzer
|
||||
/** @var Scope $nodeScope */
|
||||
$nodeScope = $node->getAttribute(Attribute::SCOPE);
|
||||
|
||||
|
||||
$publicPropertyNames = $this->getPublicPropertyNamesForType($type);
|
||||
|
||||
return ! in_array($nodePropertyName, $publicPropertyNames, true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user