Skip to content

Commit

Permalink
Include @template tags in the result cache
Browse files Browse the repository at this point in the history
  • Loading branch information
ondrejmirtes committed Oct 20, 2022
1 parent 427ddf3 commit 4c0cb98
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 0 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ jobs:
mv src/Bar.php.orig src/Bar.php
echo -n > phpstan-baseline.neon
../../bin/phpstan -vvv
- script: |
cd e2e/result-cache-2
echo -n > phpstan-baseline.neon
../../bin/phpstan -vvv
patch -b src/Bar.php < patch-1.patch
cat baseline-1.neon > phpstan-baseline.neon
../../bin/phpstan -vvv
mv src/Bar.php.orig src/Bar.php
echo -n > phpstan-baseline.neon
../../bin/phpstan -vvv
steps:
- name: "Checkout"
Expand Down
6 changes: 6 additions & 0 deletions e2e/result-cache-2/baseline-1.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
parameters:
ignoreErrors:
-
message: "#^PHPDoc tag @template T for class TestResultCache2\\\\Foo has invalid bound type TestResultCache2\\\\Bar\\.$#"
count: 1
path: src/Foo.php
11 changes: 11 additions & 0 deletions e2e/result-cache-2/patch-1.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- src/Bar.php 2022-10-17 21:44:38.000000000 +0200
+++ src/Bar.php 2022-10-17 21:45:31.000000000 +0200
@@ -2,7 +2,7 @@

namespace TestResultCache2;

-class Bar
+class Barr
{

}
Empty file.
7 changes: 7 additions & 0 deletions e2e/result-cache-2/phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
includes:
- phpstan-baseline.neon

parameters:
level: 8
paths:
- src
8 changes: 8 additions & 0 deletions e2e/result-cache-2/src/Bar.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace TestResultCache2;

class Bar
{

}
11 changes: 11 additions & 0 deletions e2e/result-cache-2/src/Foo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace TestResultCache2;

/**
* @template T of Bar
*/
class Foo
{

}
18 changes: 18 additions & 0 deletions src/Dependency/DependencyResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,26 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies
$dependenciesReflections = [];

if ($node instanceof Node\Stmt\Class_) {
if ($node->namespacedName !== null) {
$this->addClassToDependencies($node->namespacedName->toString(), $dependenciesReflections);
}
if ($node->extends !== null) {
$this->addClassToDependencies($node->extends->toString(), $dependenciesReflections);
}
foreach ($node->implements as $className) {
$this->addClassToDependencies($className->toString(), $dependenciesReflections);
}
} elseif ($node instanceof Node\Stmt\Interface_) {
if ($node->namespacedName !== null) {
$this->addClassToDependencies($node->namespacedName->toString(), $dependenciesReflections);
}
foreach ($node->extends as $className) {
$this->addClassToDependencies($className->toString(), $dependenciesReflections);
}
} elseif ($node instanceof Node\Stmt\Enum_) {
if ($node->namespacedName !== null) {
$this->addClassToDependencies($node->namespacedName->toString(), $dependenciesReflections);
}
foreach ($node->implements as $className) {
$this->addClassToDependencies($className->toString(), $dependenciesReflections);
}
Expand Down Expand Up @@ -243,6 +252,15 @@ private function addClassToDependencies(string $className, array &$dependenciesR
}
}

foreach ($classReflection->getTemplateTags() as $templateTag) {
foreach ($templateTag->getBound()->getReferencedClasses() as $referencedClass) {
if (!$this->reflectionProvider->hasClass($referencedClass)) {
continue;
}
$dependenciesReflections[] = $this->reflectionProvider->getClass($referencedClass);
}
}

$classReflection = $classReflection->getParentClass();
} while ($classReflection !== null);
}
Expand Down

0 comments on commit 4c0cb98

Please sign in to comment.