1: <?php declare(strict_types = 1);
2:
3: namespace PHPStan\Analyser;
4:
5: use PHPStan\Analyser\ResultCache\ResultCacheValueExtension;
6: use PHPStan\Reflection\ClassReflection;
7:
8: /**
9: * DependencyTracker for extensions that get no Scope because they describe a class rather than
10: * analyse code - class reflection extensions adding magic methods and properties, for example. Inject
11: * it into the extension's constructor.
12: *
13: * What PHPStan learns about a class this way is remembered and reused by every file analysed after
14: * it, so it's the class that depends on what the extension read, not the file being analysed: each
15: * method declares the dependency of $classReflection. When it changes, every file depending on the
16: * class - referencing it, calling its methods, reading its properties - is analysed again.
17: *
18: * @api
19: * @api-do-not-implement
20: */
21: interface DeclarationDependencyTracker
22: {
23:
24: /**
25: * What $classReflection declares depends on the value $extensionClass gives for $key - see
26: * DependencyTracker::trackValueDependency().
27: *
28: * @param class-string<ResultCacheValueExtension> $extensionClass
29: */
30: public function trackValueDependency(ClassReflection $classReflection, string $extensionClass, string $key): void;
31:
32: /**
33: * What $classReflection declares depends on the contents of $file - see
34: * DependencyTracker::trackFileDependency().
35: */
36: public function trackFileDependency(ClassReflection $classReflection, string $file): void;
37:
38: /**
39: * What $classReflection declares depends on the files in $directory - see
40: * DependencyTracker::trackDirectoryDependency().
41: */
42: public function trackDirectoryDependency(ClassReflection $classReflection, string $directory, string $pattern = '*'): void;
43:
44: /**
45: * What $classReflection declares depends on what the class $className declares - see
46: * DependencyTracker::trackClassDependency().
47: */
48: public function trackClassDependency(ClassReflection $classReflection, string $className): void;
49:
50: }
51: