qossmic / deptrac

Keep your architecture clean.
https://qossmic.github.io/deptrac
MIT License
2.61k stars 135 forks source link

Nullable IntersectionType error #1327

Closed puniserv closed 8 months ago

puniserv commented 9 months ago
<?php

declare(strict_types=1);

use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

class FooTest extends TestCase
{
    private (MockObject&DateTime)|null $mock = null;

    public function test()
    {
        self::assertNotSame(1,$this->getDateTimeMock());
    }

    private function getDateTimeMock(): DateTime&MockObject
    {
        return $this->mock ??= $this->createMock(DateTime::class);
    }
}
Fatal error: Uncaught TypeError: Qossmic\Deptrac\Core\Ast\Parser\TypeResolver::Qossmic\Deptrac\Core\Ast\Parser\{closure}(): Argument #1 ($typeNode) must be of type _HumbugBoxd1ea71d4b9d8\PhpParser\Node\Identifier|_HumbugBoxd1ea71d4b9d8\PhpParser\Node\Name, _HumbugBoxd1ea71d4b9d8\PhpParser\Node\IntersectionType given in phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/TypeResolver.php:136
Stack trace:
#0 [internal function]: Qossmic\Deptrac\Core\Ast\Parser\TypeResolver->Qossmic\Deptrac\Core\Ast\Parser\{closure}(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\IntersectionType))
#1 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/TypeResolver.php(136): array_map(Object(Closure), Array)
#2 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/Extractors/PropertyExtractor.php(29): Qossmic\Deptrac\Core\Ast\Parser\TypeResolver->resolvePropertyType(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\UnionType))
#3 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/NikicPhpParser/FileReferenceVisitor.php(137): Qossmic\Deptrac\Core\Ast\Parser\Extractors\PropertyExtractor->processNode(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\Stmt\Property), Object(Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeReferenceBuilder), Object(Qossmic\Deptrac\Core\Ast\Parser\TypeScope))
#4 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(202): Qossmic\Deptrac\Core\Ast\Parser\NikicPhpParser\FileReferenceVisitor->leaveNode(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\Stmt\Property))
#5 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverseArray(Array)
#6 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverseNode(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\Stmt\Class_))
#7 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverseArray(Array)
#8 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverseNode(Object(_HumbugBoxd1ea71d4b9d8\PhpParser\Node\Stmt\Namespace_))
#9 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(85): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverseArray(Array)
#10 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser.php(49): _HumbugBoxd1ea71d4b9d8\PhpParser\NodeTraverser->traverse(Array)
#11 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/AstLoader.php(28): Qossmic\Deptrac\Core\Ast\Parser\NikicPhpParser\NikicPhpParser->parseFile('/Volumes/projec...')
#12 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/AstMapExtractor.php(17): Qossmic\Deptrac\Core\Ast\AstLoader->createAstMap(Array)
#13 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Analyser/DependencyLayersAnalyser.php(23): Qossmic\Deptrac\Core\Ast\AstMapExtractor->extract()
#14 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Analyser/LegacyDependencyLayersAnalyser.php(18): Qossmic\Deptrac\Core\Analyser\DependencyLayersAnalyser->process()
#15 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Supportive/Console/Command/AnalyseRunner.php(33): Qossmic\Deptrac\Core\Analyser\LegacyDependencyLayersAnalyser->analyse()
#16 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Supportive/Console/Command/AnalyseCommand.php(57): Qossmic\Deptrac\Supportive\Console\Command\AnalyseRunner->run(Object(Qossmic\Deptrac\Supportive\Console\Command\AnalyseOptions), Object(Qossmic\Deptrac\Supportive\Console\Symfony\SymfonyOutput))
#17 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/symfony/console/Command/Command.php(265): Qossmic\Deptrac\Supportive\Console\Command\AnalyseCommand->execute(Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Input\ArgvInput), NULL)
#18 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/symfony/console/Application.php(845): _HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Command\Command->run(Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Input\ArgvInput), Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Output\ConsoleOutput))
#19 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/symfony/console/Application.php(261): _HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Application->doRunCommand(Object(Qossmic\Deptrac\Supportive\Console\Command\AnalyseCommand), Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Input\ArgvInput), Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Output\ConsoleOutput))
#20 phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Supportive/Console/Application.php(68): _HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Application->doRun(Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Input\ArgvInput), Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Output\ConsoleOutput))
#21 phar:///app/vendor/qossmic/deptrac-shim/deptrac/vendor/symfony/console/Application.php(157): Qossmic\Deptrac\Supportive\Console\Application->doRun(Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Input\ArgvInput), Object(_HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Output\ConsoleOutput))
#22 phar:///app/vendor/qossmic/deptrac-shim/deptrac/deptrac.php(24): _HumbugBoxd1ea71d4b9d8\Symfony\Component\Console\Application->run()
#23 /app/vendor/qossmic/deptrac-shim/deptrac(14): require('phar:///Volumes...')
#24 /app/vendor/bin/deptrac(119): include('/Volumes/projec...')
#25 {main}
  thrown in phar:///app/vendor/qossmic/deptrac-shim/deptrac/src/Core/Ast/Parser/TypeResolver.php on line 136
patrickkusebauch commented 8 months ago

This is already fixed in main, just needing a realease.

gennadigennadigennadi commented 8 months ago

@see https://github.com/qossmic/deptrac/issues/1243