10
10
use Magento \Framework \Api \Code \Generator \ExtensionAttributesGenerator ;
11
11
use Magento \Framework \Api \Code \Generator \ExtensionAttributesInterfaceGenerator ;
12
12
use Magento \Framework \ObjectManager \Code \Generator \Factory as FactoryGenerator ;
13
+ use Magento \Framework \Reflection \TypeProcessor ;
13
14
use Magento \Setup \Module \Di \Compiler \Log \Log ;
14
- use \Magento \Framework \Reflection \TypeProcessor ;
15
15
16
16
/**
17
17
* Finds factory and extension attributes classes which require auto-generation.
@@ -50,7 +50,7 @@ public function __construct(Log $log, TypeProcessor $typeProcessor = null)
50
50
* @param string $entityType
51
51
* @return string[]
52
52
*/
53
- protected function _findMissingClasses ($ file , $ classReflection , $ methodName , $ entityType )
53
+ private function findMissingFactories ($ file , $ classReflection , $ methodName , $ entityType )
54
54
{
55
55
$ missingClasses = [];
56
56
if (!$ classReflection ->hasMethod ($ methodName )) {
@@ -123,7 +123,7 @@ protected function getSourceClassName($missingClassName, $entityType)
123
123
*/
124
124
protected function _fetchFactories ($ reflectionClass , $ file )
125
125
{
126
- $ absentFactories = $ this ->_findMissingClasses (
126
+ $ absentFactories = $ this ->findMissingFactories (
127
127
$ file ,
128
128
$ reflectionClass ,
129
129
'__construct ' ,
@@ -177,11 +177,11 @@ public function collectEntities(array $files)
177
177
{
178
178
$ output = [[]];
179
179
foreach ($ files as $ file ) {
180
- $ classes = $ this ->_getDeclaredClasses ($ file );
180
+ $ classes = $ this ->getDeclaredClasses ($ file );
181
181
foreach ($ classes as $ className ) {
182
182
$ reflectionClass = new \ReflectionClass ($ className );
183
- $ output [] = $ this ->_fetchFactories ($ reflectionClass , $ file );
184
- $ output [] = $ this ->_fetchMissingExtensionAttributesClasses ($ reflectionClass , $ file );
183
+ $ output [] = $ this ->_fetchFactories ($ reflectionClass , $ file );
184
+ $ output [] = $ this ->_fetchMissingExtensionAttributesClasses ($ reflectionClass , $ file );
185
185
}
186
186
}
187
187
return array_unique (array_merge (...$ output ));
@@ -210,32 +210,30 @@ protected function _fetchNamespace($tokenIterator, $count, $tokens)
210
210
}
211
211
212
212
/**
213
- * Fetch class names from tokenized PHP file
213
+ * Fetches class name from tokenized PHP file.
214
214
*
215
215
* @param string $namespace
216
216
* @param int $tokenIterator
217
217
* @param int $count
218
218
* @param array $tokens
219
- * @return array
219
+ * @return string|null
220
220
*/
221
- protected function _fetchClasses ($ namespace , $ tokenIterator , $ count , $ tokens )
221
+ private function fetchClass ($ namespace , $ tokenIterator , $ count , $ tokens ):? string
222
222
{
223
- $ classes = [];
223
+ // anonymous classes should be omitted
224
+ if (is_array ($ tokens [$ tokenIterator - 2 ]) && $ tokens [$ tokenIterator - 2 ][0 ] === T_NEW ) {
225
+ return null ;
226
+ }
227
+
224
228
for ($ tokenOffset = $ tokenIterator + 1 ; $ tokenOffset < $ count ; ++$ tokenOffset ) {
225
229
if ($ tokens [$ tokenOffset ] !== '{ ' ) {
226
230
continue ;
227
231
}
228
- // anonymous classes should be omitted
229
- if (is_array ($ tokens [$ tokenIterator - 2 ]) && $ tokens [$ tokenIterator - 2 ][0 ] === T_NEW ) {
230
- continue ;
231
- }
232
232
233
- $ class = $ namespace . "\\" . $ tokens [$ tokenIterator + 2 ][1 ];
234
- if (!in_array ($ class , $ classes )) {
235
- $ classes [] = $ class ;
236
- }
233
+ return $ namespace . "\\" . $ tokens [$ tokenIterator + 2 ][1 ];
237
234
}
238
- return $ classes ;
235
+
236
+ return null ;
239
237
}
240
238
241
239
/**
@@ -244,9 +242,9 @@ protected function _fetchClasses($namespace, $tokenIterator, $count, $tokens)
244
242
* @param string $file
245
243
* @return array
246
244
*/
247
- protected function _getDeclaredClasses ($ file )
245
+ private function getDeclaredClasses ($ file ): array
248
246
{
249
- $ classes = [[] ];
247
+ $ classes = [];
250
248
$ namespaceParts = [];
251
249
// phpcs:ignore
252
250
$ tokens = token_get_all (file_get_contents ($ file ));
@@ -260,10 +258,13 @@ protected function _getDeclaredClasses($file)
260
258
if (($ tokens [$ tokenIterator ][0 ] == T_CLASS || $ tokens [$ tokenIterator ][0 ] == T_INTERFACE )
261
259
&& $ tokens [$ tokenIterator - 1 ][0 ] != T_DOUBLE_COLON
262
260
) {
263
- $ classes [] = $ this ->_fetchClasses (join ('' , $ namespaceParts ), $ tokenIterator , $ count , $ tokens );
261
+ $ class = $ this ->fetchClass (join ('' , $ namespaceParts ), $ tokenIterator , $ count , $ tokens );
262
+ if ($ class !== null && !in_array ($ class , $ classes )) {
263
+ $ classes [] = $ class ;
264
+ }
264
265
}
265
266
}
266
- return array_unique ( array_merge (... $ classes)) ;
267
+ return $ classes ;
267
268
}
268
269
269
270
/**
0 commit comments