Skip to content

Commit

Permalink
Updated BetterReflection to the latest version
Browse files Browse the repository at this point in the history
  • Loading branch information
ondrejmirtes committed Dec 3, 2021
1 parent e2be097 commit fd1fb50
Show file tree
Hide file tree
Showing 42 changed files with 322 additions and 434 deletions.
5 changes: 5 additions & 0 deletions build/baseline-7.4.neon
Expand Up @@ -60,6 +60,11 @@ parameters:
count: 1
path: ../src/Reflection/BetterReflection/SourceLocator/CachingVisitor.php

-
message: "#^Class PHPStan\\\\Reflection\\\\BetterReflection\\\\SourceLocator\\\\CachingVisitor has an uninitialized property \\$contents\\. Give it default value or assign it in the constructor\\.$#"
count: 1
path: ../src/Reflection/BetterReflection/SourceLocator/CachingVisitor.php

-
message: "#^Class PHPStan\\\\Reflection\\\\BetterReflection\\\\SourceLocator\\\\CachingVisitor has an uninitialized property \\$classNodes\\. Give it default value or assign it in the constructor\\.$#"
count: 1
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -23,7 +23,7 @@
"nette/utils": "^3.2.5",
"nikic/php-parser": "4.13.1",
"ondram/ci-detector": "^3.4.0",
"ondrejmirtes/better-reflection": "4.3.81",
"ondrejmirtes/better-reflection": "dev-ng",
"phpstan/php-8-stubs": "0.1.38",
"phpstan/phpdoc-parser": "^1.2.0",
"react/child-process": "^0.6.4",
Expand Down
36 changes: 19 additions & 17 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion conf/config.level3.neon
Expand Up @@ -69,7 +69,7 @@ services:
-
class: PHPStan\Rules\Functions\ReturnTypeRule
arguments:
functionReflector: @betterReflectionFunctionReflector
reflector: @betterReflectionReflector
tags:
- phpstan.rules.rule

Expand Down
37 changes: 14 additions & 23 deletions conf/config.neon
Expand Up @@ -413,7 +413,7 @@ services:
class: PHPStan\Analyser\NodeScopeResolver
arguments:
parser: @defaultAnalysisParser
classReflector: @nodeScopeResolverClassReflector
reflector: @nodeScopeResolverReflector
polluteScopeWithLoopInitialAssignments: %polluteScopeWithLoopInitialAssignments%
polluteScopeWithAlwaysIterableForeach: %polluteScopeWithAlwaysIterableForeach%
earlyTerminatingMethodCalls: %earlyTerminatingMethodCalls%
Expand Down Expand Up @@ -680,7 +680,7 @@ services:
-
class: PHPStan\Reflection\SignatureMap\NativeFunctionReflectionProvider
arguments:
functionReflector: @betterReflectionFunctionReflector
reflector: @betterReflectionReflector

-
class: PHPStan\Reflection\SignatureMap\SignatureMapParser
Expand Down Expand Up @@ -1632,36 +1632,25 @@ services:
factory: @PHPStan\Reflection\BetterReflection\BetterReflectionSourceLocatorFactory::create
autowired: false

betterReflectionClassReflector:
class: PHPStan\Reflection\BetterReflection\Reflector\MemoizingClassReflector
originalBetterReflectionReflector:
class: PHPStan\BetterReflection\Reflector\DefaultReflector
arguments:
sourceLocator: @betterReflectionSourceLocator
autowired: false

nodeScopeResolverClassReflector:
factory: @betterReflectionClassReflector
autowired: false

betterReflectionFunctionReflector:
class: PHPStan\Reflection\BetterReflection\Reflector\MemoizingFunctionReflector
betterReflectionReflector:
class: PHPStan\Reflection\BetterReflection\Reflector\MemoizingReflector
arguments:
classReflector: @betterReflectionClassReflector
sourceLocator: @betterReflectionSourceLocator
reflector: @originalBetterReflectionReflector
autowired: false

betterReflectionConstantReflector:
class: PHPStan\Reflection\BetterReflection\Reflector\MemoizingConstantReflector
arguments:
classReflector: @betterReflectionClassReflector
sourceLocator: @betterReflectionSourceLocator
nodeScopeResolverReflector:
factory: @betterReflectionReflector
autowired: false

betterReflectionProvider:
class: PHPStan\Reflection\BetterReflection\BetterReflectionProvider
arguments:
classReflector: @betterReflectionClassReflector
functionReflector: @betterReflectionFunctionReflector
constantReflector: @betterReflectionConstantReflector
reflector: @betterReflectionReflector
autowired: false

regexParser:
Expand Down Expand Up @@ -1701,10 +1690,12 @@ services:
implement: PHPStan\Reflection\BetterReflection\BetterReflectionProviderFactory

-
class: PHPStan\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber
class: PHPStan\Reflection\BetterReflection\SourceStubber\PhpStormStubsSourceStubberFactory
arguments:
phpParser: @php8PhpParser
phpVersionId: %phpVersion%

-
factory: @PHPStan\Reflection\BetterReflection\SourceStubber\PhpStormStubsSourceStubberFactory::create()
autowired:
- PHPStan\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber

Expand Down
24 changes: 4 additions & 20 deletions conf/config.stubValidator.neon
Expand Up @@ -14,36 +14,20 @@ services:
stubFiles: %stubFiles%

nodeScopeResolverClassReflector:
factory: @stubClassReflector
factory: @stubReflector

stubBetterReflectionProvider:
class: PHPStan\Reflection\BetterReflection\BetterReflectionProvider
arguments:
classReflector: @stubClassReflector
functionReflector: @stubFunctionReflector
constantReflector: @stubConstantReflector
reflector: @stubReflector
autowired: false

stubClassReflector:
class: PHPStan\BetterReflection\Reflector\ClassReflector
stubReflector:
class: PHPStan\BetterReflection\Reflector\DefaultReflector
arguments:
sourceLocator: @stubSourceLocator
autowired: false

stubFunctionReflector:
class: PHPStan\BetterReflection\Reflector\FunctionReflector
arguments:
classReflector: @stubClassReflector
sourceLocator: @stubSourceLocator
autowired: false

stubConstantReflector:
class: PHPStan\BetterReflection\Reflector\ConstantReflector
arguments:
classReflector: @stubClassReflector
sourceLocator: @stubSourceLocator
autowired: false

stubSourceLocator:
class: PHPStan\BetterReflection\SourceLocator\Type\SourceLocator
factory: @PHPStan\PhpDoc\StubSourceLocatorFactory::create()
Expand Down
20 changes: 20 additions & 0 deletions phpstan-baseline.neon
Expand Up @@ -10,6 +10,11 @@ parameters:
count: 1
path: src/Analyser/MutatingScope.php

-
message: "#^Parameter \\#2 \\$node of method PHPStan\\\\BetterReflection\\\\SourceLocator\\\\Ast\\\\Strategy\\\\NodeToReflection\\:\\:__invoke\\(\\) expects PhpParser\\\\Node\\\\Expr\\\\ArrowFunction\\|PhpParser\\\\Node\\\\Expr\\\\Closure\\|PhpParser\\\\Node\\\\Expr\\\\FuncCall\\|PhpParser\\\\Node\\\\Stmt\\\\Class_\\|PhpParser\\\\Node\\\\Stmt\\\\Const_\\|PhpParser\\\\Node\\\\Stmt\\\\Enum_\\|PhpParser\\\\Node\\\\Stmt\\\\Function_\\|PhpParser\\\\Node\\\\Stmt\\\\Interface_\\|PhpParser\\\\Node\\\\Stmt\\\\Trait_, PhpParser\\\\Node\\\\Stmt\\\\ClassLike given\\.$#"
count: 1
path: src/Analyser/NodeScopeResolver.php

-
message: "#^Anonymous function has an unused use \\$container\\.$#"
count: 1
Expand Down Expand Up @@ -123,11 +128,26 @@ parameters:
count: 1
path: src/Reflection/BetterReflection/BetterReflectionProvider.php

-
message: "#^Parameter \\#2 \\$node of method PHPStan\\\\BetterReflection\\\\SourceLocator\\\\Ast\\\\Strategy\\\\NodeToReflection\\:\\:__invoke\\(\\) expects PhpParser\\\\Node\\\\Expr\\\\ArrowFunction\\|PhpParser\\\\Node\\\\Expr\\\\Closure\\|PhpParser\\\\Node\\\\Expr\\\\FuncCall\\|PhpParser\\\\Node\\\\Stmt\\\\Class_\\|PhpParser\\\\Node\\\\Stmt\\\\Const_\\|PhpParser\\\\Node\\\\Stmt\\\\Enum_\\|PhpParser\\\\Node\\\\Stmt\\\\Function_\\|PhpParser\\\\Node\\\\Stmt\\\\Interface_\\|PhpParser\\\\Node\\\\Stmt\\\\Trait_, PhpParser\\\\Node\\\\Stmt\\\\ClassLike given\\.$#"
count: 2
path: src/Reflection/BetterReflection/SourceLocator/AutoloadSourceLocator.php

-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
path: src/Reflection/BetterReflection/SourceLocator/OptimizedDirectorySourceLocator.php

-
message: "#^Parameter \\#2 \\$node of method PHPStan\\\\BetterReflection\\\\SourceLocator\\\\Ast\\\\Strategy\\\\NodeToReflection\\:\\:__invoke\\(\\) expects PhpParser\\\\Node\\\\Expr\\\\ArrowFunction\\|PhpParser\\\\Node\\\\Expr\\\\Closure\\|PhpParser\\\\Node\\\\Expr\\\\FuncCall\\|PhpParser\\\\Node\\\\Stmt\\\\Class_\\|PhpParser\\\\Node\\\\Stmt\\\\Const_\\|PhpParser\\\\Node\\\\Stmt\\\\Enum_\\|PhpParser\\\\Node\\\\Stmt\\\\Function_\\|PhpParser\\\\Node\\\\Stmt\\\\Interface_\\|PhpParser\\\\Node\\\\Stmt\\\\Trait_, PhpParser\\\\Node\\\\Stmt\\\\ClassLike\\|PhpParser\\\\Node\\\\Stmt\\\\Function_ given\\.$#"
count: 1
path: src/Reflection/BetterReflection/SourceLocator/OptimizedDirectorySourceLocator.php

-
message: "#^Parameter \\#2 \\$node of method PHPStan\\\\BetterReflection\\\\SourceLocator\\\\Ast\\\\Strategy\\\\NodeToReflection\\:\\:__invoke\\(\\) expects PhpParser\\\\Node\\\\Expr\\\\ArrowFunction\\|PhpParser\\\\Node\\\\Expr\\\\Closure\\|PhpParser\\\\Node\\\\Expr\\\\FuncCall\\|PhpParser\\\\Node\\\\Stmt\\\\Class_\\|PhpParser\\\\Node\\\\Stmt\\\\Const_\\|PhpParser\\\\Node\\\\Stmt\\\\Enum_\\|PhpParser\\\\Node\\\\Stmt\\\\Function_\\|PhpParser\\\\Node\\\\Stmt\\\\Interface_\\|PhpParser\\\\Node\\\\Stmt\\\\Trait_, PhpParser\\\\Node\\\\Stmt\\\\ClassLike given\\.$#"
count: 1
path: src/Reflection/BetterReflection/SourceLocator/OptimizedSingleFileSourceLocator.php

-
message: "#^Only booleans are allowed in &&, int\\|false given on the right side\\.$#"
count: 1
Expand Down
22 changes: 11 additions & 11 deletions src/Analyser/NodeScopeResolver.php
Expand Up @@ -47,7 +47,7 @@
use PhpParser\Node\Stmt\Unset_;
use PhpParser\Node\Stmt\While_;
use PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass;
use PHPStan\BetterReflection\Reflector\ClassReflector;
use PHPStan\BetterReflection\Reflector\Reflector;
use PHPStan\BetterReflection\SourceLocator\Ast\Strategy\NodeToReflection;
use PHPStan\BetterReflection\SourceLocator\Located\LocatedSource;
use PHPStan\DependencyInjection\Reflection\ClassReflectionExtensionRegistryProvider;
Expand Down Expand Up @@ -134,7 +134,7 @@ class NodeScopeResolver

private \PHPStan\Reflection\ReflectionProvider $reflectionProvider;

private ClassReflector $classReflector;
private Reflector $reflector;

private ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider;

Expand Down Expand Up @@ -171,7 +171,7 @@ class NodeScopeResolver

/**
* @param \PHPStan\Reflection\ReflectionProvider $reflectionProvider
* @param ClassReflector $classReflector
* @param Reflector $reflector
* @param Parser $parser
* @param FileTypeMapper $fileTypeMapper
* @param PhpDocInheritanceResolver $phpDocInheritanceResolver
Expand All @@ -185,7 +185,7 @@ class NodeScopeResolver
*/
public function __construct(
ReflectionProvider $reflectionProvider,
ClassReflector $classReflector,
Reflector $reflector,
ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider,
Parser $parser,
FileTypeMapper $fileTypeMapper,
Expand All @@ -203,7 +203,7 @@ public function __construct(
)
{
$this->reflectionProvider = $reflectionProvider;
$this->classReflector = $classReflector;
$this->reflector = $reflector;
$this->classReflectionExtensionRegistryProvider = $classReflectionExtensionRegistryProvider;
$this->parser = $parser;
$this->fileTypeMapper = $fileTypeMapper;
Expand Down Expand Up @@ -1455,29 +1455,29 @@ private function getCurrentClassReflection(Node\Stmt\ClassLike $stmt, Scope $sco
{
$className = $stmt->namespacedName->toString();
if (!$this->reflectionProvider->hasClass($className)) {
return $this->createAstClassReflection($stmt, $scope);
return $this->createAstClassReflection($stmt, $className, $scope);
}

$defaultClassReflection = $this->reflectionProvider->getClass($stmt->namespacedName->toString());
if ($defaultClassReflection->getFileName() !== $scope->getFile()) {
return $this->createAstClassReflection($stmt, $scope);
return $this->createAstClassReflection($stmt, $className, $scope);
}

$startLine = $defaultClassReflection->getNativeReflection()->getStartLine();
if ($startLine !== $stmt->getStartLine()) {
return $this->createAstClassReflection($stmt, $scope);
return $this->createAstClassReflection($stmt, $className, $scope);
}

return $defaultClassReflection;
}

private function createAstClassReflection(Node\Stmt\ClassLike $stmt, Scope $scope): ClassReflection
private function createAstClassReflection(Node\Stmt\ClassLike $stmt, string $className, Scope $scope): ClassReflection
{
$nodeToReflection = new NodeToReflection();
$betterReflectionClass = $nodeToReflection->__invoke(
$this->classReflector,
$this->reflector,
$stmt,
new LocatedSource(FileReader::read($scope->getFile()), $scope->getFile()),
new LocatedSource(FileReader::read($scope->getFile()), $className, $scope->getFile()),
$scope->getNamespace() !== null ? new Node\Stmt\Namespace_(new Name($scope->getNamespace())) : null
);
if (!$betterReflectionClass instanceof \PHPStan\BetterReflection\Reflection\ReflectionClass) {
Expand Down
7 changes: 2 additions & 5 deletions src/DependencyInjection/ContainerFactory.php
Expand Up @@ -108,13 +108,10 @@ public function create(

$container = $configurator->createContainer();

BetterReflection::$phpVersion = $container->getByType(PhpVersion::class)->getVersionId();

BetterReflection::populate(
$container->getByType(PhpVersion::class)->getVersionId(),
$container->getService('betterReflectionSourceLocator'), // @phpstan-ignore-line
$container->getService('betterReflectionClassReflector'), // @phpstan-ignore-line
$container->getService('betterReflectionFunctionReflector'), // @phpstan-ignore-line
$container->getService('betterReflectionConstantReflector'), // @phpstan-ignore-line
$container->getService('betterReflectionReflector'), // @phpstan-ignore-line
$container->getService('phpParserDecorator'), // @phpstan-ignore-line
$container->getByType(PhpStormStubsSourceStubber::class)
);
Expand Down

0 comments on commit fd1fb50

Please sign in to comment.