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: */
20: interface DeclarationDependencyTracker
21: {
22:
23: /**
24: * What $classReflection declares depends on the value $extensionClass gives for $key - see
25: * DependencyTracker::trackValueDependency().
26: *
27: * @param class-string<ResultCacheValueExtension> $extensionClass
28: */
29: public function trackValueDependency(ClassReflection $classReflection, string $extensionClass, string $key): void;
30:
31: /**
32: * What $classReflection declares depends on the contents of $file - see
33: * DependencyTracker::trackFileDependency().
34: */
35: public function trackFileDependency(ClassReflection $classReflection, string $file): void;
36:
37: /**
38: * What $classReflection declares depends on the files in $directory - see
39: * DependencyTracker::trackDirectoryDependency().
40: */
41: public function trackDirectoryDependency(ClassReflection $classReflection, string $directory, string $pattern = '*'): void;
42:
43: /**
44: * What $classReflection declares depends on what the class $className declares - see
45: * DependencyTracker::trackClassDependency().
46: */
47: public function trackClassDependency(ClassReflection $classReflection, string $className): void;
48:
49: }
50: