| 1: | <?php declare(strict_types = 1); | 
| 2: | |
| 3: | namespace PHPStan\Reflection; | 
| 4: | |
| 5: | use PHPStan\Type\Type; | 
| 6: | |
| 7: | /** | 
| 8: | * This is the extension interface to implement if you want to described | 
| 9: | * allowed subtypes - to limit which classes can implement a certain interface | 
| 10: | * or extend a certain parent class. | 
| 11: | * | 
| 12: | * To register it in the configuration file use the `phpstan.broker.allowedSubTypesClassReflectionExtension` service tag: | 
| 13: | * | 
| 14: | * ``` | 
| 15: | * services: | 
| 16: | * - | 
| 17: | * class: App\PHPStan\MyExtension | 
| 18: | * tags: | 
| 19: | * - phpstan.broker.allowedSubTypesClassReflectionExtension | 
| 20: | * ``` | 
| 21: | * | 
| 22: | * Learn more: https://phpstan.org/developing-extensions/allowed-subtypes | 
| 23: | * | 
| 24: | * @api | 
| 25: | */ | 
| 26: | interface AllowedSubTypesClassReflectionExtension | 
| 27: | { | 
| 28: | |
| 29: | public function supports(ClassReflection $classReflection): bool; | 
| 30: | |
| 31: | /** | 
| 32: | * @return array<Type> | 
| 33: | */ | 
| 34: | public function getAllowedSubTypes(ClassReflection $classReflection): array; | 
| 35: | |
| 36: | } | 
| 37: |