Skip to content

Commit 63979de

Browse files
committed
Merge branch 'MAGETWO-35196' into develop
2 parents 20618e3 + 2774b1d commit 63979de

File tree

18 files changed

+200
-49
lines changed

18 files changed

+200
-49
lines changed

dev/tools/Magento/Tools/Di/App/Compiler.php

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,50 @@ class Compiler implements \Magento\Framework\AppInterface
3232
*/
3333
private $response;
3434

35+
/**
36+
* @var array
37+
*/
38+
private $compiledPathsList = [];
39+
40+
/**
41+
* @var array
42+
*/
43+
private $excludedPathsList = [];
44+
3545
/**
3646
* @param Task\Manager $taskManager
3747
* @param ObjectManagerInterface $objectManager
3848
* @param Response $response
49+
* @param array $compiledPathsList
50+
* @param array $excludedPathsList
3951
*/
4052
public function __construct(
4153
Task\Manager $taskManager,
4254
ObjectManagerInterface $objectManager,
43-
Response $response
55+
Response $response,
56+
$compiledPathsList = [],
57+
$excludedPathsList = []
4458
) {
4559
$this->taskManager = $taskManager;
4660
$this->objectManager = $objectManager;
4761
$this->response = $response;
62+
63+
if (empty($compiledPathsList)) {
64+
$compiledPathsList = [
65+
'application' => BP . '/' . 'app/code',
66+
'library' => BP . '/' . 'lib/internal/Magento/Framework',
67+
'generated_helpers' => BP . '/' . 'var/generation'
68+
];
69+
}
70+
$this->compiledPathsList = $compiledPathsList;
71+
72+
if (empty($excludedPathsList)) {
73+
$excludedPathsList = [
74+
'application' => '#^' . BP . '/app/code/[\\w]+/[\\w]+/Test#',
75+
'framework' => '#^' . BP . '/lib/internal/[\\w]+/[\\w]+/([\\w]+/)?Test#'
76+
];
77+
}
78+
$this->excludedPathsList = $excludedPathsList;
4879
}
4980

5081
/**
@@ -85,25 +116,43 @@ public function launch()
85116
'instance' => 'Magento\Framework\App\Interception\Cache\CompiledConfig'
86117
]
87118
]
119+
],
120+
'Magento\Tools\Di\Code\Reader\ClassesScanner' => [
121+
'arguments' => [
122+
'excludePatterns' => $this->excludedPathsList
123+
]
88124
]
89125
]
90126
);
91127

92128
$operations = [
93129
Task\OperationFactory::REPOSITORY_GENERATOR => [
94-
'path' => BP . '/' . 'app/code',
130+
'path' => $this->compiledPathsList['application'],
95131
'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
96132
],
97133
Task\OperationFactory::APPLICATION_CODE_GENERATOR => [
98-
BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
134+
$this->compiledPathsList['application'],
135+
$this->compiledPathsList['library'],
136+
$this->compiledPathsList['generated_helpers'],
99137
],
100138
Task\OperationFactory::INTERCEPTION =>
101-
BP . '/var/generation',
139+
[
140+
'intercepted_paths' => [
141+
$this->compiledPathsList['application'],
142+
$this->compiledPathsList['library'],
143+
$this->compiledPathsList['generated_helpers'],
144+
],
145+
'path_to_store' => $this->compiledPathsList['generated_helpers'],
146+
],
102147
Task\OperationFactory::AREA_CONFIG_GENERATOR => [
103-
BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
148+
$this->compiledPathsList['application'],
149+
$this->compiledPathsList['library'],
150+
$this->compiledPathsList['generated_helpers'],
104151
],
105152
Task\OperationFactory::INTERCEPTION_CACHE => [
106-
BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
153+
$this->compiledPathsList['application'],
154+
$this->compiledPathsList['library'],
155+
$this->compiledPathsList['generated_helpers'],
107156
]
108157
];
109158

dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Area implements OperationInterface
1818
private $areaList;
1919

2020
/**
21-
* @var \Magento\Tools\Di\Code\Reader\InstancesNamesList\Area
21+
* @var \Magento\Tools\Di\Code\Reader\Decorator\Area
2222
*/
2323
private $areaInstancesNamesList;
2424

@@ -44,15 +44,15 @@ class Area implements OperationInterface
4444

4545
/**
4646
* @param App\AreaList $areaList
47-
* @param \Magento\Tools\Di\Code\Reader\InstancesNamesList\Area $areaInstancesNamesList
47+
* @param \Magento\Tools\Di\Code\Reader\Decorator\Area $areaInstancesNamesList
4848
* @param Config\Reader $configReader
4949
* @param Config\WriterInterface $configWriter
5050
* @param \Magento\Tools\Di\Compiler\Config\ModificationChain $modificationChain
5151
* @param array $data
5252
*/
5353
public function __construct(
5454
App\AreaList $areaList,
55-
\Magento\Tools\Di\Code\Reader\InstancesNamesList\Area $areaInstancesNamesList,
55+
\Magento\Tools\Di\Code\Reader\Decorator\Area $areaInstancesNamesList,
5656
Config\Reader $configReader,
5757
Config\WriterInterface $configWriter,
5858
Config\ModificationChain $modificationChain,

dev/tools/Magento/Tools/Di/App/Task/Operation/Interception.php

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use Magento\Tools\Di\Code\Generator\InterceptionConfigurationBuilder;
1010
use Magento\Framework\Interception\Code\Generator\Interceptor;
1111
use Magento\Framework\App;
12+
use Magento\Tools\Di\Code\GeneratorFactory;
13+
use Magento\Tools\Di\Code\Reader\ClassesScanner;
1214

1315
class Interception implements OperationInterface
1416
{
@@ -23,23 +25,39 @@ class Interception implements OperationInterface
2325
private $interceptionConfigurationBuilder;
2426

2527
/**
26-
* @var string
28+
* @var array
2729
*/
28-
private $data = '';
30+
private $data = [];
31+
32+
/**
33+
* @var ClassesScanner
34+
*/
35+
private $classesScanner;
36+
37+
/**
38+
* @var GeneratorFactory
39+
*/
40+
private $generatorFactory;
2941

3042
/**
3143
* @param InterceptionConfigurationBuilder $interceptionConfigurationBuilder
3244
* @param App\AreaList $areaList
33-
* @param string $data
45+
* @param ClassesScanner $classesScanner
46+
* @param GeneratorFactory $generatorFactory
47+
* @param array $data
3448
*/
3549
public function __construct(
3650
InterceptionConfigurationBuilder $interceptionConfigurationBuilder,
3751
App\AreaList $areaList,
38-
$data = ''
52+
ClassesScanner $classesScanner,
53+
GeneratorFactory $generatorFactory,
54+
$data = []
3955
) {
4056
$this->interceptionConfigurationBuilder = $interceptionConfigurationBuilder;
4157
$this->areaList = $areaList;
4258
$this->data = $data;
59+
$this->classesScanner = $classesScanner;
60+
$this->generatorFactory = $generatorFactory;
4361
}
4462

4563
/**
@@ -56,17 +74,24 @@ public function doOperation()
5674
$this->interceptionConfigurationBuilder->addAreaCode($areaCode);
5775
}
5876

77+
$classesList = [];
78+
foreach ($this->data['intercepted_paths'] as $path) {
79+
$classesList = array_merge($classesList, $this->classesScanner->getList($path));
80+
}
81+
5982
$generatorIo = new \Magento\Framework\Code\Generator\Io(
6083
new \Magento\Framework\Filesystem\Driver\File(),
61-
$this->data
84+
$this->data['path_to_store']
6285
);
63-
$generator = new \Magento\Tools\Di\Code\Generator(
64-
$generatorIo,
86+
$generator = $this->generatorFactory->create(
6587
[
66-
Interceptor::ENTITY_TYPE => 'Magento\Tools\Di\Code\Generator\Interceptor',
88+
'ioObject' => $generatorIo,
89+
'generatedEntities' => [
90+
Interceptor::ENTITY_TYPE => 'Magento\Tools\Di\Code\Generator\Interceptor',
91+
]
6792
]
6893
);
69-
$configuration = $this->interceptionConfigurationBuilder->getInterceptionConfiguration(get_declared_classes());
94+
$configuration = $this->interceptionConfigurationBuilder->getInterceptionConfiguration($classesList);
7095
$generator->generateList($configuration);
7196
}
7297
}

dev/tools/Magento/Tools/Di/App/Task/Operation/InterceptionCache.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ class InterceptionCache implements OperationInterface
2020
private $configInterface;
2121

2222
/**
23-
* @var \Magento\Tools\Di\Code\Reader\InstancesNamesList\Interceptions
23+
* @var \Magento\Tools\Di\Code\Reader\Decorator\Interceptions
2424
*/
2525
private $interceptionsInstancesNamesList;
2626

2727
/**
2828
* @param \Magento\Framework\Interception\Config\Config $configInterface
29-
* @param \Magento\Tools\Di\Code\Reader\InstancesNamesList\Interceptions $interceptionsInstancesNamesList
29+
* @param \Magento\Tools\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList
3030
* @param array $data
3131
*/
3232
public function __construct(
3333
\Magento\Framework\Interception\Config\Config $configInterface,
34-
\Magento\Tools\Di\Code\Reader\InstancesNamesList\Interceptions $interceptionsInstancesNamesList,
34+
\Magento\Tools\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList,
3535
array $data = []
3636
) {
3737
$this->configInterface = $configInterface;

dev/tools/Magento/Tools/Di/Code/Generator.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
namespace Magento\Tools\Di\Code;
99

1010
use Magento\Framework\Code\Generator as FrameworkGenerator;
11+
use Magento\Framework\Code\Generator\DefinedClasses;
12+
use Magento\Framework\ObjectManagerInterface;
1113

1214
/**
1315
* Class Generator
@@ -22,6 +24,23 @@ class Generator extends FrameworkGenerator
2224
*/
2325
private $classMethods = [];
2426

27+
/**
28+
* @param ObjectManagerInterface $objectManagerInterface
29+
* @param FrameworkGenerator\Io $ioObject
30+
* @param array $generatedEntities
31+
* @param DefinedClasses $definedClasses
32+
*/
33+
public function __construct(
34+
ObjectManagerInterface $objectManagerInterface,
35+
\Magento\Framework\Code\Generator\Io $ioObject = null,
36+
array $generatedEntities = [],
37+
DefinedClasses $definedClasses = null
38+
) {
39+
parent::__construct($ioObject, $generatedEntities, $definedClasses);
40+
$this->setObjectManager($objectManagerInterface);
41+
}
42+
43+
2544
/**
2645
* Create entity generator
2746
*
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Tools\Di\Code;
7+
8+
use Magento\Framework\ObjectManagerInterface;
9+
10+
class GeneratorFactory
11+
{
12+
/**
13+
* @var ObjectManagerInterface
14+
*/
15+
private $objectManager;
16+
17+
/**
18+
* @param ObjectManagerInterface $objectManager
19+
*/
20+
public function __construct(ObjectManagerInterface $objectManager)
21+
{
22+
$this->objectManager = $objectManager;
23+
}
24+
25+
/**
26+
* Creates operation
27+
*
28+
* @param array $arguments
29+
* @return Generator
30+
*/
31+
public function create($arguments = [])
32+
{
33+
return $this->objectManager->create('Magento\Tools\Di\Code\Generator', $arguments);
34+
}
35+
}

dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,21 @@
88
use Magento\Framework\Filesystem\FilesystemException;
99
use Zend\Code\Scanner\FileScanner;
1010

11-
class ClassesScanner
11+
class ClassesScanner implements ClassesScannerInterface
1212
{
1313
/**
1414
* @var array
1515
*/
1616
protected $excludePatterns = [];
1717

18+
/**
19+
* @param array $excludePatterns
20+
*/
21+
public function __construct(array $excludePatterns = [])
22+
{
23+
$this->excludePatterns = $excludePatterns;
24+
}
25+
1826
/**
1927
* Adds exclude patterns
2028
*

dev/tools/Magento/Tools/Di/Code/Reader/InstancesNamesListInterface.php renamed to dev/tools/Magento/Tools/Di/Code/Reader/ClassesScannerInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
namespace Magento\Tools\Di\Code\Reader;
77

88
/**
9-
* Interface InstancesNamesList
9+
* Interface ClassesScannerInterface
1010
*
1111
* @package Magento\Tools\Di\Code\Reader
1212
*/
13-
interface InstancesNamesListInterface
13+
interface ClassesScannerInterface
1414
{
1515

1616
/**

dev/tools/Magento/Tools/Di/Code/Reader/InstancesNamesList/Area.php renamed to dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Tools\Di\Code\Reader\InstancesNamesList;
6+
namespace Magento\Tools\Di\Code\Reader\Decorator;
77

88
use Magento\Tools\Di\Code\Reader\ClassesScanner;
99
use Magento\Tools\Di\Code\Reader\ClassReaderDecorator;
@@ -12,9 +12,9 @@
1212
/**
1313
* Class Area
1414
*
15-
* @package Magento\Tools\Di\Code\Reader\InstancesNamesList
15+
* @package Magento\Tools\Di\Code\Reader\Decorator
1616
*/
17-
class Area implements \Magento\Tools\Di\Code\Reader\InstancesNamesListInterface
17+
class Area implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
1818
{
1919
/**
2020
* @var ClassReaderDecorator

dev/tools/Magento/Tools/Di/Code/Reader/InstancesNamesList/Directory.php renamed to dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Tools\Di\Code\Reader\InstancesNamesList;
6+
namespace Magento\Tools\Di\Code\Reader\Decorator;
77

88
use Magento\Tools\Di\Compiler\Log\Log;
99

1010
/**
1111
* Class Directory
1212
*
13-
* @package Magento\Tools\Di\Code\Reader\InstancesNamesList
13+
* @package Magento\Tools\Di\Code\Reader\Decorator
1414
*/
15-
class Directory implements \Magento\Tools\Di\Code\Reader\InstancesNamesListInterface
15+
class Directory implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
1616
{
1717
/**
1818
* @var string

0 commit comments

Comments
 (0)