1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Module\Di\App\Task\Operation;
use Magento\Setup\Module\Di\App\Task\OperationInterface;
use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder;
use Magento\Framework\Interception\Code\Generator\Interceptor;
use Magento\Framework\App;
use Magento\Setup\Module\Di\Code\GeneratorFactory;
use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
class Interception implements OperationInterface
{
/**
* @var App\AreaList
*/
private $areaList;
/**
* @var InterceptionConfigurationBuilder
*/
private $interceptionConfigurationBuilder;
/**
* @var array
*/
private $data = [];
/**
* @var ClassesScanner
*/
private $classesScanner;
/**
* @var GeneratorFactory
*/
private $generatorFactory;
/**
* @param InterceptionConfigurationBuilder $interceptionConfigurationBuilder
* @param App\AreaList $areaList
* @param ClassesScanner $classesScanner
* @param GeneratorFactory $generatorFactory
* @param array $data
*/
public function __construct(
InterceptionConfigurationBuilder $interceptionConfigurationBuilder,
App\AreaList $areaList,
ClassesScanner $classesScanner,
GeneratorFactory $generatorFactory,
$data = []
) {
$this->interceptionConfigurationBuilder = $interceptionConfigurationBuilder;
$this->areaList = $areaList;
$this->data = $data;
$this->classesScanner = $classesScanner;
$this->generatorFactory = $generatorFactory;
}
/**
* {@inheritdoc}
*/
public function doOperation()
{
if (empty($this->data)) {
return;
}
$this->interceptionConfigurationBuilder->addAreaCode(App\Area::AREA_GLOBAL);
foreach ($this->areaList->getCodes() as $areaCode) {
$this->interceptionConfigurationBuilder->addAreaCode($areaCode);
}
$classesList = [];
foreach ($this->data['intercepted_paths'] as $paths) {
if (!is_array($paths)) {
$paths = (array)$paths;
}
foreach ($paths as $path) {
$classesList = array_merge($classesList, $this->classesScanner->getList($path));
}
}
$generatorIo = new \Magento\Framework\Code\Generator\Io(
new \Magento\Framework\Filesystem\Driver\File(),
$this->data['path_to_store']
);
$generator = $this->generatorFactory->create(
[
'ioObject' => $generatorIo,
'generatedEntities' => [
Interceptor::ENTITY_TYPE => \Magento\Setup\Module\Di\Code\Generator\Interceptor::class,
]
]
);
$configuration = $this->interceptionConfigurationBuilder->getInterceptionConfiguration($classesList);
$generator->generateList($configuration);
}
/**
* Returns operation name
*
* @return string
*/
public function getName()
{
return 'Interceptors generation';
}
}