309 $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
318 '/\/dev\/tests\/static\/testsuite\/Magento\/Test\/Integrity\/ClassesTest.php$/',
324 $formalPattern =
'/^namespace\s[a-zA-Z]+(\\\\[a-zA-Z0-9]+)*/m';
325 $formalNamespaceArray = [];
328 if (preg_match($formalPattern,
$contents, $formalNamespaceArray) == 0) {
331 $namespacePath = str_replace(
'\\',
'/', substr($formalNamespaceArray[0], 10));
334 $newObjectPattern =
'/^' .
335 '.*new\s(?<venderClass>\\\\Magento(?:\\\\[a-zA-Z0-9_]+)+)\(.*\)' .
336 '|.*new\s(?<badClass>[A-Z][a-zA-Z0-9]+[a-zA-Z0-9_\\\\]*)\(.*\)\;' .
337 '|use [A-Z][a-zA-Z0-9_\\\\]+ as (?<aliasClass>[A-Z][a-zA-Z0-9]+)' .
340 preg_match_all($newObjectPattern,
$contents, $result1);
343 $staticCallPattern =
'/^' .
344 '((?!Magento).)*(?<venderClass>\\\\Magento(?:\\\\[a-zA-Z0-9_]+)+)\:\:.*\;' .
345 '|[^\\\\^a-z^A-Z^0-9^_^:](?<badClass>[A-Z][a-zA-Z0-9_]+)\:\:.*\;' .
346 '|use [A-Z][a-zA-Z0-9_\\\\]+ as (?<aliasClass>[A-Z][a-zA-Z0-9]+)' .
349 preg_match_all($staticCallPattern,
$contents, $result2);
352 $annotationPattern =
'/^' .
353 '[\s]*\*\s\@(?:return|throws)\s(?<venderClass>\\\\Magento(?:\\\\[a-zA-Z0-9_]+)+)' .
354 '|[\s]*\*\s\@return\s(?<badClass>[A-Z][a-zA-Z0-9_\\\\]+)' .
355 '|[\s]*\*\s\@throws\s(?<exception>[A-Z][a-zA-Z0-9_\\\\]+)' .
356 '|use [A-Z][a-zA-Z0-9_\\\\]+ as (?<aliasClass>[A-Z][a-zA-Z0-9]+)' .
359 preg_match_all($annotationPattern,
$contents, $result3);
361 $vendorClasses = array_unique(
362 array_merge_recursive($result1[
'venderClass'], $result2[
'venderClass'], $result3[
'venderClass'])
365 $badClasses = array_unique(
366 array_merge_recursive($result1[
'badClass'], $result2[
'badClass'], $result3[
'badClass'])
369 $aliasClasses = array_unique(
370 array_merge_recursive($result1[
'aliasClass'], $result2[
'aliasClass'], $result3[
'aliasClass'])
373 $vendorClasses = array_filter($vendorClasses,
'strlen');
374 $vendorClasses = $this->referenceBlacklistFilter($vendorClasses);
375 if (!empty($vendorClasses)) {
376 $this->assertClassesExist($vendorClasses, $file);
379 if (!empty($result3[
'exception']) && $result3[
'exception'][0] !=
"") {
380 $badClasses = array_merge($badClasses, array_filter($result3[
'exception'],
'strlen'));
383 $badClasses = array_filter($badClasses,
'strlen');
384 if (empty($badClasses)) {
388 $aliasClasses = array_filter($aliasClasses,
'strlen');
389 if (!empty($aliasClasses)) {
390 $badClasses = $this->handleAliasClasses($aliasClasses, $badClasses);
393 $badClasses = $this->referenceBlacklistFilter($badClasses);
394 $badClasses = $this->removeSpecialCases($badClasses, $file,
$contents, $namespacePath);
395 $this->assertClassReferences($badClasses, $file);