18 private $autogeneratedClassesWhitelist;
23 private $classNameExtractor;
28 private $autogeneratedClassNotInConstructorFinder;
33 private $fileUtilities;
39 $this->classNameExtractor
48 $phpFiles = $this->fileUtilities->getPhpFiles($fileTypes);
50 $existingClasses = [];
51 $classesCreatedByObjectManager = [];
52 foreach ($phpFiles as $file) {
55 $className = $this->classNameExtractor->getNameWithNamespace($fileContent);
57 $existingClasses = array_merge(
66 $className = $this->classNameExtractor->getNameWithNamespace($fileContent);
68 $tmpClassesCreatedByObjectManager = array_diff(
69 $this->autogeneratedClassNotInConstructorFinder->find($fileContent),
70 $this->getWhitelistedClasses()
73 if (!empty($tmpClassesCreatedByObjectManager)) {
74 $classesCreatedByObjectManager = array_merge(
75 $classesCreatedByObjectManager,
76 [$filePath => $tmpClassesCreatedByObjectManager]
82 $existingClasses = array_unique($existingClasses);
84 $generatedDependenciesNotInConstructor = [];
85 foreach ($classesCreatedByObjectManager as $key => $classes) {
86 $autogeneratedClasses = array_diff($classes, $existingClasses);
87 if (!empty($autogeneratedClasses)) {
88 $generatedDependenciesNotInConstructor[$key] = $autogeneratedClasses;
93 $generatedDependenciesNotInConstructor,
94 "The following autogenerated classes need to be requested in constructor, otherwise compiler " 95 .
"will not be able to find and generate these classes \r\n" 96 . print_r($generatedDependenciesNotInConstructor,
true)
105 private function getWhitelistedClasses()
107 if (!$this->autogeneratedClassesWhitelist) {
108 $this->autogeneratedClassesWhitelist = require_once
__DIR__ 109 .
'/_files/autogenerated_class_not_in_constructor_whitelist.php';
111 return $this->autogeneratedClassesWhitelist;
testAutogeneratedClassesRequestedInConstructor()
static getPhpFiles($changedFilesList, $fileTypes=0)
defined('TESTS_BP')||define('TESTS_BP' __DIR__