From eeb8eac28a6013b3f129144991f41818c1c5d59c Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 18:44:26 +0200 Subject: [PATCH 01/18] typo [ci skip] --- packages/Annotation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Annotation/README.md b/packages/Annotation/README.md index 3c849ce8a..975b10b86 100644 --- a/packages/Annotation/README.md +++ b/packages/Annotation/README.md @@ -19,7 +19,7 @@ Here are you options: ## How to Modify Description -Sometimes you need to modify your description: decorate HTML, Markdown or anyhting else: +Sometimes you need to modify your description: decorate HTML, Markdown or anything else: ```php /** From c79a4d5f2d14d0e4a832b11a5a3f6b47edcc34e1 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 18:46:14 +0200 Subject: [PATCH 02/18] [ecs] update config, allow fixed ClassConstantFixer --- easy-coding-standard.neon | 2 -- 1 file changed, 2 deletions(-) diff --git a/easy-coding-standard.neon b/easy-coding-standard.neon index e7b5e3d2b..203792553 100644 --- a/easy-coding-standard.neon +++ b/easy-coding-standard.neon @@ -23,7 +23,6 @@ checkers: usefulAnnotations: - @dataProvider - @deprecated - - @todo enableEachParameterAndReturnInspection: true parameters: @@ -33,7 +32,6 @@ parameters: - PhpCsFixer\Fixer\Phpdoc\PhpdocAlignFixer - PhpCsFixer\Fixer\Operator\NewWithBracesFixer - PhpCsFixer\Fixer\Phpdoc\PhpdocInlineTagFixer - - Symplify\CodingStandard\Fixer\Php\ClassStringToClassConstantFixer skip: SlevomatCodingStandard\Sniffs\TypeHints\TypeHintDeclarationSniff: From f6a65e645c5f445f9f930367600859eb41b5a554 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 18:46:28 +0200 Subject: [PATCH 03/18] fix cs --- packages/Element/tests/AutocompleteElementsTest.php | 3 ++- packages/Reflection/tests/Parser/ExtendingClassTest.php | 3 ++- packages/Reflection/tests/Parser/UseDifferentVendorTest.php | 6 ++++-- .../Function_/FunctionParameterReflection/ClassTypeTest.php | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/Element/tests/AutocompleteElementsTest.php b/packages/Element/tests/AutocompleteElementsTest.php index 86631fd3f..f40d43d16 100644 --- a/packages/Element/tests/AutocompleteElementsTest.php +++ b/packages/Element/tests/AutocompleteElementsTest.php @@ -7,6 +7,7 @@ use ApiGen\Reflection\ReflectionStorage; use ApiGen\StringRouting\Route\ReflectionRoute; use ApiGen\Tests\AbstractContainerAwareTestCase; +use NoneNamespacedClass; final class AutocompleteElementsTest extends AbstractContainerAwareTestCase { @@ -76,7 +77,7 @@ public function provideDataForLabelsTest(): array [$this->namespacePrefix], [$this->namespacePrefix . '\SubNamespace'], ['none'], - ['NoneNamespacedClass'], + [NoneNamespacedClass::class], [$this->namespacePrefix . '\namespacedFunction()'], [$this->namespacePrefix . '\NamespacedClass'], [$this->namespacePrefix . '\SubNamespace\SubNamespacedInterface'], diff --git a/packages/Reflection/tests/Parser/ExtendingClassTest.php b/packages/Reflection/tests/Parser/ExtendingClassTest.php index 7b8312d96..ed17688d4 100644 --- a/packages/Reflection/tests/Parser/ExtendingClassTest.php +++ b/packages/Reflection/tests/Parser/ExtendingClassTest.php @@ -3,6 +3,7 @@ namespace ApiGen\Reflection\Tests\Parser; use ApiGen\Reflection\Parser\Parser; +use ApiGen\Reflection\Tests\Parser\ExtendingSources\ExtendingClass; use ApiGen\Tests\AbstractContainerAwareTestCase; final class ExtendingClassTest extends AbstractContainerAwareTestCase @@ -13,6 +14,6 @@ public function test(): void $parser = $this->container->get(Parser::class); $parser->parseFilesAndDirectories([__DIR__ . '/ExtendingSources']); - $this->assertTrue(class_exists('\ApiGen\Reflection\Tests\Parser\ExtendingSources\ExtendingClass')); + $this->assertTrue(class_exists(ExtendingClass::class)); } } diff --git a/packages/Reflection/tests/Parser/UseDifferentVendorTest.php b/packages/Reflection/tests/Parser/UseDifferentVendorTest.php index 27645aec2..8ef7a1323 100644 --- a/packages/Reflection/tests/Parser/UseDifferentVendorTest.php +++ b/packages/Reflection/tests/Parser/UseDifferentVendorTest.php @@ -4,6 +4,8 @@ use ApiGen\Reflection\Parser\Parser; use ApiGen\Tests\AbstractContainerAwareTestCase; +use DifferentVendor\DifferentClass; +use MyVendor\MyClass; final class UseDifferentVendorTest extends AbstractContainerAwareTestCase { @@ -13,7 +15,7 @@ public function test(): void $parser->parseFilesAndDirectories([__DIR__ . '/DifferentVendorSources/src']); - $this->assertTrue(class_exists('\MyVendor\MyClass')); - $this->assertTrue(class_exists('\DifferentVendor\DifferentClass')); + $this->assertTrue(class_exists(MyClass::class)); + $this->assertTrue(class_exists(DifferentClass::class)); } } diff --git a/packages/Reflection/tests/Reflection/Function_/FunctionParameterReflection/ClassTypeTest.php b/packages/Reflection/tests/Reflection/Function_/FunctionParameterReflection/ClassTypeTest.php index fccb02df7..0cf6786d1 100644 --- a/packages/Reflection/tests/Reflection/Function_/FunctionParameterReflection/ClassTypeTest.php +++ b/packages/Reflection/tests/Reflection/Function_/FunctionParameterReflection/ClassTypeTest.php @@ -4,6 +4,7 @@ use ApiGen\Reflection\Contract\Reflection\Function_\FunctionParameterReflectionInterface; use ApiGen\Tests\AbstractParserAwareTestCase; +use SplFileInfo; final class ClassTypeTest extends AbstractParserAwareTestCase { @@ -29,6 +30,6 @@ protected function setUp(): void public function testType(): void { - $this->assertSame('SplFileInfo', $this->functionParameterReflection->getTypeHint()); + $this->assertSame(SplFileInfo::class, $this->functionParameterReflection->getTypeHint()); } } From 40d08e0445cf40f5ccb8c12e56f7b8d8569d128d Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 19:33:02 +0200 Subject: [PATCH 04/18] [packages] split to standalone configs --- packages/Annotation/src/config/services.yml | 6 ++++++ .../BetterReflection/src/config/services.yml | 6 ++++++ packages/Element/src/config/services.yml | 6 ++++++ .../src/config/services.yml | 7 +++++++ packages/Reflection/src/config/services.yml | 7 +++++++ .../StringRouting/src/config/services.yml | 6 ++++++ src/config/services.yml | 20 ++++++++----------- 7 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 packages/Annotation/src/config/services.yml create mode 100644 packages/BetterReflection/src/config/services.yml create mode 100644 packages/Element/src/config/services.yml create mode 100644 packages/ModularConfiguration/src/config/services.yml create mode 100644 packages/Reflection/src/config/services.yml create mode 100644 packages/StringRouting/src/config/services.yml diff --git a/packages/Annotation/src/config/services.yml b/packages/Annotation/src/config/services.yml new file mode 100644 index 000000000..f2b09310d --- /dev/null +++ b/packages/Annotation/src/config/services.yml @@ -0,0 +1,6 @@ +services: + _defaults: + autowire: true + + ApiGen\Annotation\: + resource: '..' diff --git a/packages/BetterReflection/src/config/services.yml b/packages/BetterReflection/src/config/services.yml new file mode 100644 index 000000000..27ad8e65b --- /dev/null +++ b/packages/BetterReflection/src/config/services.yml @@ -0,0 +1,6 @@ +services: + _defaults: + autowire: true + + ApiGen\BetterReflection\: + resource: '..' diff --git a/packages/Element/src/config/services.yml b/packages/Element/src/config/services.yml new file mode 100644 index 000000000..705e48c7d --- /dev/null +++ b/packages/Element/src/config/services.yml @@ -0,0 +1,6 @@ +services: + _defaults: + autowire: true + + ApiGen\Element\: + resource: '..' diff --git a/packages/ModularConfiguration/src/config/services.yml b/packages/ModularConfiguration/src/config/services.yml new file mode 100644 index 000000000..930ceda61 --- /dev/null +++ b/packages/ModularConfiguration/src/config/services.yml @@ -0,0 +1,7 @@ +services: + _defaults: + autowire: true + + ApiGen\ModularConfiguration\: + resource: '..' + exclude: '../{Exception}' diff --git a/packages/Reflection/src/config/services.yml b/packages/Reflection/src/config/services.yml new file mode 100644 index 000000000..2f0de69ff --- /dev/null +++ b/packages/Reflection/src/config/services.yml @@ -0,0 +1,7 @@ +services: + _defaults: + autowire: true + + ApiGen\Reflection\: + resource: '..' + exclude: '../{Exception,Reflection,DocBlock/Tags}' diff --git a/packages/StringRouting/src/config/services.yml b/packages/StringRouting/src/config/services.yml new file mode 100644 index 000000000..5396250ca --- /dev/null +++ b/packages/StringRouting/src/config/services.yml @@ -0,0 +1,6 @@ +services: + _defaults: + autowire: true + + ApiGen\StringRouting\: + resource: '..' diff --git a/src/config/services.yml b/src/config/services.yml index a61a9daef..ce2d0ef66 100644 --- a/src/config/services.yml +++ b/src/config/services.yml @@ -1,3 +1,11 @@ +imports: + - { resource: '../../packages/Annotation/src/config/services.yml' } +# - { resource: '../../packages/BetterReflection/src/config/services.yml' } + - { resource: '../../packages/Element/src/config/services.yml' } + - { resource: '../../packages/ModularConfiguration/src/config/services.yml' } + - { resource: '../../packages/Reflection/src/config/services.yml' } + - { resource: '../../packages/StringRouting/src/config/services.yml' } + services: _defaults: autowire: true @@ -6,18 +14,6 @@ services: ApiGen\: resource: '../../src' exclude: '../../src/{Application/Command,Event,Exception}' - ApiGen\Annotation\: - resource: '../../packages/Annotation/src' - ApiGen\Element\: - resource: '../../packages/Element/src' - ApiGen\ModularConfiguration\: - resource: '../../packages/ModularConfiguration/src' - exclude: '../../packages/ModularConfiguration/src/{Exception}' - ApiGen\Reflection\: - resource: '../../packages/Reflection/src' - exclude: '../../packages/Reflection/src/{Exception,Reflection,DocBlock/Tags}' - ApiGen\StringRouting\: - resource: '../../packages/StringRouting/src' # Filter Aware Latte Engine Latte\Engine: From 891bdf8c8090ee72028943bb9d06d1accda27daf Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 20:20:40 +0200 Subject: [PATCH 05/18] use Cached Locator BetterReflection commit --- README.md | 2 +- composer.json | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ac43ad33b..e4e4e4e04 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Add to your `composer.json`: { "require": { "apigen/apigen": "5.0.0-RC4", - "roave/better-reflection": "dev-master#a83ef24" + "roave/better-reflection": "dev-master#a402048" } } ``` diff --git a/composer.json b/composer.json index 8d62bac13..f327e2eb1 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "bin": ["bin/apigen"], "require": { "php": "^7.1", - "roave/better-reflection": "dev-master#d9a0d26", + "roave/better-reflection": "dev-master#a402048", "phpdocumentor/reflection-docblock": "^3.1", "kukulich/fshl": "^2.1", @@ -39,6 +39,7 @@ "psr-4": { "ApiGen\\": "src", "ApiGen\\Annotation\\": "packages/Annotation/src", + "ApiGen\\BetterReflection\\": "packages/BetterReflection/src", "ApiGen\\Element\\": "packages/Element/src", "ApiGen\\ModularConfiguration\\": "packages/ModularConfiguration/src", "ApiGen\\Reflection\\": "packages/Reflection/src", @@ -57,7 +58,7 @@ "packages/Element/tests/ReflectionCollector/NamespaceReflectionCollectorSource/namespacedFunction.php", "packages/Element/tests/ReflectionCollector/NamespaceReflectionCollectorSource/NoneNamespacedClass.php", "packages/Element/tests/ReflectionCollector/Source/deprecatedFunction.php", - "packages/Reflection/tests/Parser/DifferentVendorSources/vendor/DifferentVendor/DifferentClass.php", + "packages/Reflection/tests/Parser/DifferentVendorSources/vendor/DifferentVendor/DifferentClass.php", "packages/Reflection/tests/Parser/DifferentVendorSources/src/MyVendor/MyClass.php", "packages/Reflection/tests/Reflection/Function_/FunctionReflection/Source/SomeFunction.php", "packages/Reflection/tests/Reflection/Function_/FunctionParameterReflection/Source/functionWithConstant.php", From ea9f3c68e7b7fd0617c3fa024a67c41b05049a29 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 20:21:04 +0200 Subject: [PATCH 06/18] [BetterReflection] decouple Directory and File Source Locatory Factories --- .../src/Parser/ParserFactory.php | 31 +++++++++ .../src/SourceLocator/CachedAstLocator.php | 53 +++++++++++++++ .../DirectorySourceLocatorFactory.php | 34 ++++++++++ .../FileSourceLocatorFactory.php | 29 +++++++++ .../BetterReflection/src/config/services.yml | 9 +++ packages/Reflection/src/Parser/Parser.php | 64 +++++-------------- src/config/services.yml | 4 +- 7 files changed, 175 insertions(+), 49 deletions(-) create mode 100644 packages/BetterReflection/src/Parser/ParserFactory.php create mode 100644 packages/BetterReflection/src/SourceLocator/CachedAstLocator.php create mode 100644 packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php create mode 100644 packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php diff --git a/packages/BetterReflection/src/Parser/ParserFactory.php b/packages/BetterReflection/src/Parser/ParserFactory.php new file mode 100644 index 000000000..458c43121 --- /dev/null +++ b/packages/BetterReflection/src/Parser/ParserFactory.php @@ -0,0 +1,31 @@ +lexer = $lexer; + $this->nikicParserFactory = $nikicParserFactory; + } + + public function create(): NikicParser + { + return $this->nikicParserFactory->create(NikicParserFactory::PREFER_PHP7, $this->lexer); + } +} diff --git a/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php b/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php new file mode 100644 index 000000000..4cff2ac40 --- /dev/null +++ b/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php @@ -0,0 +1,53 @@ +findReflectionsInTree = $findReflectionsInTree; + $this->parser = $parser; + } + + public function findReflection( + Reflector $reflector, + LocatedSource $locatedSource, + Identifier $identifier + ): Reflection { + // ... + } + + /** + * @return mixed[] + */ + public function findReflectionsOfType( + Reflector $reflector, + LocatedSource $locatedSource, + IdentifierType $identifierType + ): array { + // ... + } +} diff --git a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php new file mode 100644 index 000000000..a690342b0 --- /dev/null +++ b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php @@ -0,0 +1,34 @@ +transformerCollector = $transformerCollector; $this->reflectionStorage = $reflectionStorage; $this->reflectionWarmUpper = $reflectionWarmUpper; + $this->directorySourceLocatorFactory = $directorySourceLocatorFactory; + $this->fileSourceLocatorFactory = $fileSourceLocatorFactory; } /** @@ -70,7 +78,7 @@ public function parseFilesAndDirectories(array $sources): void */ private function parseDirectories(array $directories): void { - $directoriesSourceLocator = $this->createDirectoriesSource($directories); + $directoriesSourceLocator = $this->directorySourceLocatorFactory->createFromDirectories($directories); $this->parseClassElements($directoriesSourceLocator); $this->parseFunctions($directoriesSourceLocator); @@ -83,7 +91,7 @@ private function parseDirectories(array $directories): void */ private function parseFiles(array $files): void { - $filesSourceLocator = $this->createFilesSource($files); + $filesSourceLocator = $this->fileSourceLocatorFactory->createFromFiles($files); $this->parseClassElements($filesSourceLocator); $this->parseFunctions($filesSourceLocator); @@ -219,42 +227,4 @@ private function parseFunctions(SourceLocator $sourceLocator): void $functionReflections = $this->transformBetterFunctionReflections($functionReflector); $this->reflectionStorage->setFunctionReflections($functionReflections); } - - /** - * @param string[] $directories - */ - private function createDirectoriesSource(array $directories): SourceLocator - { - $locators = [ - new DirectoriesSourceLocator($directories), - new AutoloadSourceLocator, - new PhpInternalSourceLocator, - ]; - - foreach ($directories as $directory) { - $autoload = dirname($directory) . '/vendor/autoload.php'; - if (is_file($autoload)) { - $locators[] = new ComposerSourceLocator(include $autoload); - } - } - - return new AggregateSourceLocator($locators); - } - - /** - * @param string[] $files - */ - private function createFilesSource(array $files): SourceLocator - { - $locators = [ - new AutoloadSourceLocator, - new PhpInternalSourceLocator, - ]; - - foreach ($files as $file) { - $locators[] = new SingleFileSourceLocator($file); - } - - return new AggregateSourceLocator($locators); - } } diff --git a/src/config/services.yml b/src/config/services.yml index ce2d0ef66..b12829e28 100644 --- a/src/config/services.yml +++ b/src/config/services.yml @@ -1,6 +1,6 @@ imports: - { resource: '../../packages/Annotation/src/config/services.yml' } -# - { resource: '../../packages/BetterReflection/src/config/services.yml' } + - { resource: '../../packages/BetterReflection/src/config/services.yml' } - { resource: '../../packages/Element/src/config/services.yml' } - { resource: '../../packages/ModularConfiguration/src/config/services.yml' } - { resource: '../../packages/Reflection/src/config/services.yml' } @@ -17,7 +17,7 @@ services: # Filter Aware Latte Engine Latte\Engine: - factory: 'ApiGen\Latte\FiltersAwareLatteEngineFactory:create' + factory: ['@ApiGen\Latte\FiltersAwareLatteEngineFactory', 'create'] # PHP Documentor phpDocumentor\Reflection\DocBlockFactory: ~ From 0f4c8c1a17bcfb8c532b5982936778ad68d18e05 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 20:33:17 +0200 Subject: [PATCH 07/18] fix cs --- .../BetterReflection/src/SourceLocator/CachedAstLocator.php | 2 +- .../src/SourceLocator/FileSourceLocatorFactory.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php b/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php index 4cff2ac40..c20c90e6f 100644 --- a/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php +++ b/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php @@ -12,7 +12,7 @@ use Roave\BetterReflection\SourceLocator\Located\LocatedSource; /** - * Based on https://github.com/Roave/BetterReflection/pull/312 + * Based on https://github.com/Roave/BetterReflection/pull/312. */ final class CachedAstLocator implements Locator { diff --git a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php index 1cbfdd5b6..2e53842b7 100644 --- a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php @@ -26,4 +26,4 @@ public function createFromFiles(array $files): SourceLocator return new AggregateSourceLocator($locators); } -} \ No newline at end of file +} From ea42fb862bd1ab4334d666a8879dad69f80886f0 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 20:47:15 +0200 Subject: [PATCH 08/18] [BetterRefleciton] use PhpParserLocator --- .../src/SourceLocator/CachedAstLocator.php | 53 ------------------- .../DirectorySourceLocatorFactory.php | 17 ++++-- .../FileSourceLocatorFactory.php | 17 ++++-- .../BetterReflection/src/config/services.yml | 6 ++- 4 files changed, 32 insertions(+), 61 deletions(-) delete mode 100644 packages/BetterReflection/src/SourceLocator/CachedAstLocator.php diff --git a/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php b/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php deleted file mode 100644 index c20c90e6f..000000000 --- a/packages/BetterReflection/src/SourceLocator/CachedAstLocator.php +++ /dev/null @@ -1,53 +0,0 @@ -findReflectionsInTree = $findReflectionsInTree; - $this->parser = $parser; - } - - public function findReflection( - Reflector $reflector, - LocatedSource $locatedSource, - Identifier $identifier - ): Reflection { - // ... - } - - /** - * @return mixed[] - */ - public function findReflectionsOfType( - Reflector $reflector, - LocatedSource $locatedSource, - IdentifierType $identifierType - ): array { - // ... - } -} diff --git a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php index a690342b0..f1dfe2397 100644 --- a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php @@ -2,6 +2,7 @@ namespace ApiGen\BetterReflection\SourceLocator; +use Roave\BetterReflection\SourceLocator\Ast\Locator as AstLocator; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; use Roave\BetterReflection\SourceLocator\Type\AutoloadSourceLocator; use Roave\BetterReflection\SourceLocator\Type\ComposerSourceLocator; @@ -11,15 +12,25 @@ final class DirectorySourceLocatorFactory { + /** + * @var AstLocator + */ + private $astLocator; + + public function __construct(AstLocator $astLocator) + { + $this->astLocator = $astLocator; + } + /** * @param string[] $directories */ public function createFromDirectories(array $directories): SourceLocator { $locators = [ - new DirectoriesSourceLocator($directories), - new AutoloadSourceLocator, - new PhpInternalSourceLocator, + new DirectoriesSourceLocator($directories, $this->astLocator), + new AutoloadSourceLocator($this->astLocator), + new PhpInternalSourceLocator($this->astLocator), ]; foreach ($directories as $directory) { diff --git a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php index 2e53842b7..a44cc93ac 100644 --- a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php @@ -2,6 +2,7 @@ namespace ApiGen\BetterReflection\SourceLocator; +use Roave\BetterReflection\SourceLocator\Ast\Locator as AstLocator; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; use Roave\BetterReflection\SourceLocator\Type\AutoloadSourceLocator; use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; @@ -10,18 +11,28 @@ final class FileSourceLocatorFactory { + /** + * @var AstLocator + */ + private $astLocator; + + public function __construct(AstLocator $astLocator) + { + $this->astLocator = $astLocator; + } + /** * @param string[] $files */ public function createFromFiles(array $files): SourceLocator { $locators = [ - new AutoloadSourceLocator, - new PhpInternalSourceLocator, + new AutoloadSourceLocator($this->astLocator), + new PhpInternalSourceLocator($this->astLocator), ]; foreach ($files as $file) { - $locators[] = new SingleFileSourceLocator($file); + $locators[] = new SingleFileSourceLocator($file, $this->astLocator); } return new AggregateSourceLocator($locators); diff --git a/packages/BetterReflection/src/config/services.yml b/packages/BetterReflection/src/config/services.yml index e074948bd..bc7299fc8 100644 --- a/packages/BetterReflection/src/config/services.yml +++ b/packages/BetterReflection/src/config/services.yml @@ -5,8 +5,10 @@ services: ApiGen\BetterReflection\: resource: '..' - Roave\BetterReflection\SourceLocator\Ast\FindReflectionsInTree: ~ - Roave\BetterReflection\SourceLocator\Ast\Strategy\AstConversionStrategy: ~ + # cached AST Locator + Roave\BetterReflection\SourceLocator\Ast\PhpParserLocator: ~ + Roave\BetterReflection\SourceLocator\Ast\Locator: + alias: Roave\BetterReflection\SourceLocator\Ast\PhpParserLocator # nikic\PHP-Parser PhpParser\Parser: From 936a6990b58314bf219fae0f79ca1060b0d850e6 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 20:59:56 +0200 Subject: [PATCH 09/18] [CachedParser] init --- .../src/Parser/CachedParser.php | 30 +++++++++++++++++++ .../src/Parser/ParserFactory.php | 9 ++++-- 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 packages/BetterReflection/src/Parser/CachedParser.php diff --git a/packages/BetterReflection/src/Parser/CachedParser.php b/packages/BetterReflection/src/Parser/CachedParser.php new file mode 100644 index 000000000..8af88303e --- /dev/null +++ b/packages/BetterReflection/src/Parser/CachedParser.php @@ -0,0 +1,30 @@ +nikicParserFactory = $nikicParserFactory; } - public function create(): NikicParser + public function create(): Parser { - return $this->nikicParserFactory->create(NikicParserFactory::PREFER_PHP7, $this->lexer); + $nativeParser = $this->nikicParserFactory->create(NikicParserFactory::PREFER_PHP7, $this->lexer); + + return new MemoizingParser($nativeParser); } } From de2861dfefa6236d5db31e0ad3752f0b7747d60c Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sat, 26 Aug 2017 23:19:22 +0200 Subject: [PATCH 10/18] remove unused code --- .../src/Parser/CachedParser.php | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 packages/BetterReflection/src/Parser/CachedParser.php diff --git a/packages/BetterReflection/src/Parser/CachedParser.php b/packages/BetterReflection/src/Parser/CachedParser.php deleted file mode 100644 index 8af88303e..000000000 --- a/packages/BetterReflection/src/Parser/CachedParser.php +++ /dev/null @@ -1,30 +0,0 @@ - Date: Sun, 27 Aug 2017 13:29:11 +0200 Subject: [PATCH 11/18] [BetterReflection] better decoupling of SourceLocator Factories --- .../DirectorySourceLocatorFactory.php | 29 ++++----- .../FallbackSourceLocatorFactory.php | 40 ++++++++++++ .../FileSourceLocatorFactory.php | 7 +-- .../ProjectVendorSourceLocatorFactory.php | 42 +++++++++++++ .../SourceLocator/SourceLocatorsFactory.php | 61 +++++++++++++++++++ 5 files changed, 156 insertions(+), 23 deletions(-) create mode 100644 packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php create mode 100644 packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php create mode 100644 packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php diff --git a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php index f1dfe2397..5f6323621 100644 --- a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php @@ -4,10 +4,7 @@ use Roave\BetterReflection\SourceLocator\Ast\Locator as AstLocator; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; -use Roave\BetterReflection\SourceLocator\Type\AutoloadSourceLocator; -use Roave\BetterReflection\SourceLocator\Type\ComposerSourceLocator; use Roave\BetterReflection\SourceLocator\Type\DirectoriesSourceLocator; -use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; use Roave\BetterReflection\SourceLocator\Type\SourceLocator; final class DirectorySourceLocatorFactory @@ -16,10 +13,17 @@ final class DirectorySourceLocatorFactory * @var AstLocator */ private $astLocator; + /** + * @var ProjectVendorSourceLocatorFactory + */ + private $projectVendorSourceLocatorFactory; - public function __construct(AstLocator $astLocator) - { + public function __construct( + AstLocator $astLocator, + ProjectVendorSourceLocatorFactory $projectVendorSourceLocatorFactory + ) { $this->astLocator = $astLocator; + $this->projectVendorSourceLocatorFactory = $projectVendorSourceLocatorFactory; } /** @@ -27,18 +31,9 @@ public function __construct(AstLocator $astLocator) */ public function createFromDirectories(array $directories): SourceLocator { - $locators = [ - new DirectoriesSourceLocator($directories, $this->astLocator), - new AutoloadSourceLocator($this->astLocator), - new PhpInternalSourceLocator($this->astLocator), - ]; - - foreach ($directories as $directory) { - $autoload = dirname($directory) . '/vendor/autoload.php'; - if (is_file($autoload)) { - $locators[] = new ComposerSourceLocator(include $autoload); - } - } + $locators = []; + $locators[] = new DirectoriesSourceLocator($directories, $this->astLocator); + $locators[] = $this->projectVendorSourceLocatorFactory->createFromDirectories($directories); return new AggregateSourceLocator($locators); } diff --git a/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php new file mode 100644 index 000000000..51b6b286d --- /dev/null +++ b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php @@ -0,0 +1,40 @@ +astLocator = $astLocator; + $this->projectVendorSourceLocatorFactory = $projectVendorSourceLocatorFactory; + } + + /** + * @param string[] $directories + */ + public function createFromDirecotires(array $directories): SourceLocator + { + $locators = [ + new AutoloadSourceLocator($this->astLocator), + new PhpInternalSourceLocator($this->astLocator), + ]; + + $locators[] = $this->projectVendorSourceLocatorFactory->createFromDirectories($directories); + + return new AggregateSourceLocator($locators); + } +} diff --git a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php index a44cc93ac..6426eeeb0 100644 --- a/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/FileSourceLocatorFactory.php @@ -4,8 +4,6 @@ use Roave\BetterReflection\SourceLocator\Ast\Locator as AstLocator; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; -use Roave\BetterReflection\SourceLocator\Type\AutoloadSourceLocator; -use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; use Roave\BetterReflection\SourceLocator\Type\SingleFileSourceLocator; use Roave\BetterReflection\SourceLocator\Type\SourceLocator; @@ -26,10 +24,7 @@ public function __construct(AstLocator $astLocator) */ public function createFromFiles(array $files): SourceLocator { - $locators = [ - new AutoloadSourceLocator($this->astLocator), - new PhpInternalSourceLocator($this->astLocator), - ]; + $locators = []; foreach ($files as $file) { $locators[] = new SingleFileSourceLocator($file, $this->astLocator); diff --git a/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php new file mode 100644 index 000000000..b3e2c2040 --- /dev/null +++ b/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php @@ -0,0 +1,42 @@ +tryToFindProjectAutoload($directories)) { + return $composerSourceLocator; + } + + return new AggregateSourceLocator; + } + + /** + * @param string[] $directories + */ + private function tryToFindProjectAutoload(array $directories): ?ComposerSourceLocator + { + foreach ($directories as $directory) { + $autoload = dirname($directory) . '/vendor/autoload.php'; + if (is_file($autoload)) { + return new ComposerSourceLocator(include $autoload); + } + } + + return null; + } +} diff --git a/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php b/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php new file mode 100644 index 000000000..9d4456bd4 --- /dev/null +++ b/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php @@ -0,0 +1,61 @@ +directorySourceLocatorFactory = $directorySourceLocatorFactory; + $this->fileSourceLocatorFactory = $fileSourceLocatorFactory; + $this->fallbackSourceLocatorFactory = $fallbackSourceLocatorFactory; + $this->projectVendorSourceLocatorFactory = $projectVendorSourceLocatorFactory; + } + + /** + * @param string[] $directories + * @param string[] $files + */ + public function createFromDirectoriesAndFiles(array $directories, array $files): SourceLocator + { + $locators = []; + if ($directories) { + $locators[] = $this->directorySourceLocatorFactory->createFromDirectories($directories); + } + + if ($files) { + $locators[] = $this->fileSourceLocatorFactory->createFromFiles($files); + } + + $locators[] = $this->fallbackSourceLocatorFactory->createFromDirecotires($directories); + + return new AggregateSourceLocator($locators); + } +} From ce231de9b14fdb0466492979662f8be42777e55b Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 13:30:00 +0200 Subject: [PATCH 12/18] [Reflection] use single SourcesLocatorFactory in Parser; removes duplications --- packages/Reflection/src/Parser/Parser.php | 75 ++++++++++------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/packages/Reflection/src/Parser/Parser.php b/packages/Reflection/src/Parser/Parser.php index 97f94392f..52a364a2b 100644 --- a/packages/Reflection/src/Parser/Parser.php +++ b/packages/Reflection/src/Parser/Parser.php @@ -2,8 +2,7 @@ namespace ApiGen\Reflection\Parser; -use ApiGen\BetterReflection\SourceLocator\DirectorySourceLocatorFactory; -use ApiGen\BetterReflection\SourceLocator\FileSourceLocatorFactory; +use ApiGen\BetterReflection\SourceLocator\SourceLocatorsFactory; use ApiGen\Element\Cache\ReflectionWarmUpper; use ApiGen\Reflection\Contract\Reflection\Class_\ClassReflectionInterface; use ApiGen\Reflection\Contract\Reflection\Function_\FunctionReflectionInterface; @@ -31,27 +30,22 @@ final class Parser * @var ReflectionWarmUpper */ private $reflectionWarmUpper; + /** - * @var DirectorySourceLocatorFactory - */ - private $directorySourceLocatorFactory; - /** - * @var FileSourceLocatorFactory + * @var SourceLocatorsFactory */ - private $fileSourceLocatorFactory; + private $sourceLocatorsFactory; public function __construct( TransformerCollector $transformerCollector, ReflectionStorage $reflectionStorage, ReflectionWarmUpper $reflectionWarmUpper, - DirectorySourceLocatorFactory $directorySourceLocatorFactory, - FileSourceLocatorFactory $fileSourceLocatorFactory + SourceLocatorsFactory $sourceLocatorsFactory ) { $this->transformerCollector = $transformerCollector; $this->reflectionStorage = $reflectionStorage; $this->reflectionWarmUpper = $reflectionWarmUpper; - $this->directorySourceLocatorFactory = $directorySourceLocatorFactory; - $this->fileSourceLocatorFactory = $fileSourceLocatorFactory; + $this->sourceLocatorsFactory = $sourceLocatorsFactory; } /** @@ -59,42 +53,17 @@ public function __construct( */ public function parseFilesAndDirectories(array $sources): void { - $files = []; - $directories = []; - foreach ($sources as $source) { - if (is_dir($source)) { - $directories[] = $source; - } else { - $files[] = $source; - } - } - - $this->parseDirectories($directories); - $this->parseFiles($files); - } - - /** - * @param string[] $directories - */ - private function parseDirectories(array $directories): void - { - $directoriesSourceLocator = $this->directorySourceLocatorFactory->createFromDirectories($directories); + [$files, $directories] = $this->splitSourcesToDirectoriesAndFiles($sources); - $this->parseClassElements($directoriesSourceLocator); - $this->parseFunctions($directoriesSourceLocator); + $sourceLocator = $this->sourceLocatorsFactory->createFromDirectoriesAndFiles($directories, $files); - $this->reflectionWarmUpper->warmUp(); + $this->parseSourceLocator($sourceLocator); } - /** - * @param string[] $files - */ - private function parseFiles(array $files): void + private function parseSourceLocator(SourceLocator $sourceLocator): void { - $filesSourceLocator = $this->fileSourceLocatorFactory->createFromFiles($files); - - $this->parseClassElements($filesSourceLocator); - $this->parseFunctions($filesSourceLocator); + $this->parseClassElements($sourceLocator); + $this->parseFunctions($sourceLocator); $this->reflectionWarmUpper->warmUp(); } @@ -227,4 +196,24 @@ private function parseFunctions(SourceLocator $sourceLocator): void $functionReflections = $this->transformBetterFunctionReflections($functionReflector); $this->reflectionStorage->setFunctionReflections($functionReflections); } + + /** + * @param string[] $sources + * @return string[][] + */ + private function splitSourcesToDirectoriesAndFiles(array $sources): array + { + $files = []; + $directories = []; + + foreach ($sources as $source) { + if (is_dir($source)) { + $directories[] = $source; + } else { + $files[] = $source; + } + } + + return [$files, $directories]; + } } From aa56b903840cd82e65183481dee1779cb1e754f3 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 13:32:39 +0200 Subject: [PATCH 13/18] statis analysis fixes --- .../src/SourceLocator/FallbackSourceLocatorFactory.php | 5 +++++ .../SourceLocator/ProjectVendorSourceLocatorFactory.php | 3 ++- .../src/SourceLocator/SourceLocatorsFactory.php | 9 +-------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php index 51b6b286d..954a5e3c5 100644 --- a/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php @@ -10,6 +10,11 @@ final class FallbackSourceLocatorFactory { + /** + * @var AstLocator + */ + private $astLocator; + /** * @var ProjectVendorSourceLocatorFactory */ diff --git a/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php index b3e2c2040..dd5cda6b5 100644 --- a/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/ProjectVendorSourceLocatorFactory.php @@ -18,7 +18,8 @@ final class ProjectVendorSourceLocatorFactory */ public function createFromDirectories(array $directories): SourceLocator { - if ($composerSourceLocator = $this->tryToFindProjectAutoload($directories)) { + $composerSourceLocator = $this->tryToFindProjectAutoload($directories); + if ($composerSourceLocator !== null) { return $composerSourceLocator; } diff --git a/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php b/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php index 9d4456bd4..ecb5dc2a3 100644 --- a/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php +++ b/packages/BetterReflection/src/SourceLocator/SourceLocatorsFactory.php @@ -22,21 +22,14 @@ final class SourceLocatorsFactory */ private $fallbackSourceLocatorFactory; - /** - * @var ProjectVendorSourceLocatorFactory - */ - private $projectVendorSourceLocatorFactory; - public function __construct( DirectorySourceLocatorFactory $directorySourceLocatorFactory, FileSourceLocatorFactory $fileSourceLocatorFactory, - FallbackSourceLocatorFactory $fallbackSourceLocatorFactory, - ProjectVendorSourceLocatorFactory $projectVendorSourceLocatorFactory + FallbackSourceLocatorFactory $fallbackSourceLocatorFactory ) { $this->directorySourceLocatorFactory = $directorySourceLocatorFactory; $this->fileSourceLocatorFactory = $fileSourceLocatorFactory; $this->fallbackSourceLocatorFactory = $fallbackSourceLocatorFactory; - $this->projectVendorSourceLocatorFactory = $projectVendorSourceLocatorFactory; } /** From a613cd61bddb964429b0b0986a75706b7ef371c9 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 16:43:22 +0200 Subject: [PATCH 14/18] [BetterReflection] syntax suggar --- .../src/SourceLocator/DirectorySourceLocatorFactory.php | 9 ++++----- .../src/SourceLocator/FallbackSourceLocatorFactory.php | 9 +++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php index 5f6323621..593050c0d 100644 --- a/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/DirectorySourceLocatorFactory.php @@ -31,10 +31,9 @@ public function __construct( */ public function createFromDirectories(array $directories): SourceLocator { - $locators = []; - $locators[] = new DirectoriesSourceLocator($directories, $this->astLocator); - $locators[] = $this->projectVendorSourceLocatorFactory->createFromDirectories($directories); - - return new AggregateSourceLocator($locators); + return new AggregateSourceLocator([ + new DirectoriesSourceLocator($directories, $this->astLocator), + $this->projectVendorSourceLocatorFactory->createFromDirectories($directories), + ]); } } diff --git a/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php index 954a5e3c5..405c815d2 100644 --- a/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php +++ b/packages/BetterReflection/src/SourceLocator/FallbackSourceLocatorFactory.php @@ -33,13 +33,10 @@ public function __construct( */ public function createFromDirecotires(array $directories): SourceLocator { - $locators = [ + return new AggregateSourceLocator([ new AutoloadSourceLocator($this->astLocator), new PhpInternalSourceLocator($this->astLocator), - ]; - - $locators[] = $this->projectVendorSourceLocatorFactory->createFromDirectories($directories); - - return new AggregateSourceLocator($locators); + $this->projectVendorSourceLocatorFactory->createFromDirectories($directories), + ]); } } From f32258cf0ddad819297e71a8f7f5c5fd75c99d6f Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 16:43:29 +0200 Subject: [PATCH 15/18] [Refleciton] fix InterfaceReflecion test --- .../src/Reflection/Interface_/InterfaceReflection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Reflection/src/Reflection/Interface_/InterfaceReflection.php b/packages/Reflection/src/Reflection/Interface_/InterfaceReflection.php index 95b60829a..4c9d3b2c6 100644 --- a/packages/Reflection/src/Reflection/Interface_/InterfaceReflection.php +++ b/packages/Reflection/src/Reflection/Interface_/InterfaceReflection.php @@ -134,7 +134,7 @@ public function getMethod(string $name): InterfaceMethodReflectionInterface public function getOwnConstants(): array { return $this->transformerCollector->transformGroup( - $this->betterInterfaceReflection->getReflectionConstants() + $this->betterInterfaceReflection->getImmediateReflectionConstants() ); } From 5f58e4674f0c889b431addaa489153ba49a7c833 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 16:44:08 +0200 Subject: [PATCH 16/18] [Refleciton] fix ClassReflecion test --- packages/Reflection/src/Reflection/Class_/ClassReflection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Reflection/src/Reflection/Class_/ClassReflection.php b/packages/Reflection/src/Reflection/Class_/ClassReflection.php index 5fbd08846..f6e475efd 100644 --- a/packages/Reflection/src/Reflection/Class_/ClassReflection.php +++ b/packages/Reflection/src/Reflection/Class_/ClassReflection.php @@ -222,7 +222,7 @@ public function getConstants(): array public function getOwnConstants(): array { return $this->transformerCollector->transformGroup( - $this->betterClassReflection->getReflectionConstants() + $this->betterClassReflection->getImmediateReflectionConstants() ); } From 89898ff12f8c512601d4662f82344cc189199994 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 17:04:39 +0200 Subject: [PATCH 17/18] docs comments --- packages/Reflection/src/Parser/Parser.php | 25 +++++++++-------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/Reflection/src/Parser/Parser.php b/packages/Reflection/src/Parser/Parser.php index 52a364a2b..cbead24e3 100644 --- a/packages/Reflection/src/Parser/Parser.php +++ b/packages/Reflection/src/Parser/Parser.php @@ -56,12 +56,6 @@ public function parseFilesAndDirectories(array $sources): void [$files, $directories] = $this->splitSourcesToDirectoriesAndFiles($sources); $sourceLocator = $this->sourceLocatorsFactory->createFromDirectoriesAndFiles($directories, $files); - - $this->parseSourceLocator($sourceLocator); - } - - private function parseSourceLocator(SourceLocator $sourceLocator): void - { $this->parseClassElements($sourceLocator); $this->parseFunctions($sourceLocator); @@ -111,7 +105,7 @@ private function transformBetterClassInterfaceAndTraitReflections(ClassReflector } /** - * @param ClassReflectionInterface[] + * @param ClassReflectionInterface[] $betterClassReflections * @return ClassReflectionInterface[] */ private function resolveParentClassesInterfacesAndTraits(array $betterClassReflections): array @@ -130,27 +124,28 @@ private function resolveParentClassesInterfacesAndTraits(array $betterClassRefle } /** - * @param ClassReflectionInterface[] + * @param ClassReflectionInterface[] $classReflections * @return ClassReflectionInterface[] */ - private function resolveParentClasses(array $reflections): array + private function resolveParentClasses(array $classReflections): array { - foreach ($reflections as $reflection) { + foreach ($classReflections as $reflection) { $class = $reflection; while ($parentClass = $class->getParentClass()) { - if (! isset($reflections[$parentClass->getName()])) { - $reflections[$parentClass->getName()] = $parentClass; + /** @var ClassReflectionInterface $parentClass */ + if (! isset($classReflections[$parentClass->getName()])) { + $classReflections[$parentClass->getName()] = $parentClass; } $class = $parentClass; } } - return $reflections; + return $classReflections; } /** - * @param ClassReflectionInterface[] + * @param ClassReflectionInterface[] $reflections * @return ClassReflectionInterface[] */ private function resolveParentInterfaces(array $reflections): array @@ -167,7 +162,7 @@ private function resolveParentInterfaces(array $reflections): array } /** - * @param ClassReflectionInterface[] + * @param ClassReflectionInterface[] $reflections * @return ClassReflectionInterface[] */ private function resolveParentTraits(array $reflections): array From f5d674d1eb67056540a008e5591925c53b5c24e2 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Sun, 27 Aug 2017 17:08:01 +0200 Subject: [PATCH 18/18] docs comments, [Parser] early returns added --- packages/Reflection/src/Parser/Parser.php | 28 ++++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/Reflection/src/Parser/Parser.php b/packages/Reflection/src/Parser/Parser.php index cbead24e3..568292bd1 100644 --- a/packages/Reflection/src/Parser/Parser.php +++ b/packages/Reflection/src/Parser/Parser.php @@ -132,12 +132,14 @@ private function resolveParentClasses(array $classReflections): array foreach ($classReflections as $reflection) { $class = $reflection; while ($parentClass = $class->getParentClass()) { + $class = $parentClass; + /** @var ClassReflectionInterface $parentClass */ - if (! isset($classReflections[$parentClass->getName()])) { - $classReflections[$parentClass->getName()] = $parentClass; + if (isset($classReflections[$parentClass->getName()])) { + continue; } - $class = $parentClass; + $classReflections[$parentClass->getName()] = $parentClass; } } @@ -145,16 +147,18 @@ private function resolveParentClasses(array $classReflections): array } /** - * @param ClassReflectionInterface[] $reflections - * @return ClassReflectionInterface[] + * @param ClassReflectionInterface[]|InterfaceReflectionInterface[] $reflections + * @return ClassReflectionInterface[]|InterfaceReflectionInterface[] */ private function resolveParentInterfaces(array $reflections): array { foreach ($reflections as $reflection) { foreach ($reflection->getInterfaces() as $interface) { - if (! isset($reflections[$interface->getName()])) { - $reflections[$interface->getName()] = $interface; + if (isset($reflections[$interface->getName()])) { + continue; } + + $reflections[$interface->getName()] = $interface; } } @@ -162,16 +166,18 @@ private function resolveParentInterfaces(array $reflections): array } /** - * @param ClassReflectionInterface[] $reflections - * @return ClassReflectionInterface[] + * @param ClassReflectionInterface[]|TraitReflectionInterface[] $reflections + * @return ClassReflectionInterface[]|TraitReflectionInterface[] */ private function resolveParentTraits(array $reflections): array { foreach ($reflections as $reflection) { foreach ($reflection->getTraits() as $trait) { - if (! isset($reflections[$trait->getName()])) { - $reflections[$trait->getName()] = $trait; + if (isset($reflections[$trait->getName()])) { + continue; } + + $reflections[$trait->getName()] = $trait; } }