Turn InterfaceTypeResolver to BetterReflection

This commit is contained in:
Tomas Votruba 2018-08-05 18:19:02 +02:00
parent 915fec0ff8
commit 12c3909ea3
4 changed files with 12 additions and 16 deletions

View File

@ -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) {

View File

@ -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;
}
}

View File

@ -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
];
}
}

View File

@ -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);