Skip to content

Commit 1db2d56

Browse files
author
He, Joan(johe)
committed
Merge pull request #288 from magento-extensibility/MAGETWO-44270-fatal-memory-allocation
[Extensibility] Bug Fixes
2 parents 26a148a + fadfce0 commit 1db2d56

File tree

13 files changed

+263
-264
lines changed

13 files changed

+263
-264
lines changed

app/code/Magento/Cron/etc/di.xml

+7
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@
3636
</argument>
3737
</arguments>
3838
</type>
39+
<type name="Magento\Framework\App\AreaList">
40+
<arguments>
41+
<argument name="areas" xsi:type="array">
42+
<item name="crontab" xsi:type="null" />
43+
</argument>
44+
</arguments>
45+
</type>
3946
</config>

lib/internal/Magento/Framework/Config/Reader/Filesystem.php

+10
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
6767
*/
6868
protected $validationState;
6969

70+
/**
71+
* @var string
72+
*/
73+
protected $_defaultScope;
74+
75+
/**
76+
* @var string
77+
*/
78+
protected $_schemaFile;
79+
7080
/**
7181
* Constructor
7282
*

lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/FactoryTest.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ public function testCreatePositive($type)
5151
)->will(
5252
$this->returnValue($elementMock)
5353
);
54-
$this->assertSame($elementMock, $this->_factory->create($type));
54+
$element = $this->_factory->create($type);
55+
$this->assertSame($elementMock, $element);
56+
unset($elementMock, $element);
5557
}
5658

5759
/**
@@ -73,7 +75,9 @@ public function testCreatePositiveWithNotEmptyConfig($type)
7375
)->will(
7476
$this->returnValue($elementMock)
7577
);
76-
$this->assertSame($elementMock, $this->_factory->create($type, $config));
78+
$element = $this->_factory->create($type, $config);
79+
$this->assertSame($elementMock, $element);
80+
unset($elementMock, $element);
7781
}
7882

7983
/**

setup/src/Magento/Setup/Console/Command/DiCompileCommand.php

+4-21
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
161161
'application' => $excludedModulePaths,
162162
'framework' => $excludedLibraryPaths
163163
];
164-
$dataAttributesIncludePattern = [
165-
'extension_attributes' => '/\/etc\/([a-zA-Z_]*\/extension_attributes|extension_attributes)\.xml$/'
166-
];
167164
$this->configureObjectManager($output);
168165

169-
$operations = $this->getOperationsConfiguration(
170-
$compiledPathsList,
171-
$dataAttributesIncludePattern
172-
);
166+
$operations = $this->getOperationsConfiguration($compiledPathsList);
173167

174168
try {
175169
$this->cleanupFilesystem(
@@ -286,33 +280,22 @@ private function configureObjectManager(OutputInterface $output)
286280
* Returns operations configuration
287281
*
288282
* @param array $compiledPathsList
289-
* @param array $dataAttributesIncludePattern
290283
* @return array
291284
*/
292285
private function getOperationsConfiguration(
293-
array $compiledPathsList,
294-
array $dataAttributesIncludePattern
286+
array $compiledPathsList
295287
) {
296288
$excludePatterns = [];
297289
foreach ($this->excludedPathsList as $excludedPaths) {
298290
$excludePatterns = array_merge($excludedPaths, $excludePatterns);
299291
}
300292

301293
$operations = [
302-
OperationFactory::PROXY_GENERATOR => [
303-
'paths' => $compiledPathsList['application'],
304-
'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
305-
'excludePatterns' => $excludePatterns,
306-
],
294+
OperationFactory::PROXY_GENERATOR => [],
307295
OperationFactory::REPOSITORY_GENERATOR => [
308296
'paths' => $compiledPathsList['application'],
309-
'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
310-
'excludePatterns' => $excludePatterns,
311-
],
312-
OperationFactory::DATA_ATTRIBUTES_GENERATOR => [
313-
'paths' => $compiledPathsList['application'],
314-
'filePatterns' => $dataAttributesIncludePattern
315297
],
298+
OperationFactory::DATA_ATTRIBUTES_GENERATOR => [],
316299
OperationFactory::APPLICATION_CODE_GENERATOR => [
317300
'paths' => [
318301
$compiledPathsList['application'],

setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php

+3
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ public function generateCode($generationDir, $fileExcludePatterns, $input)
260260
$directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns)
261261
);
262262
}
263+
$this->files['di'][] = $this->directoryList->getPath(
264+
\Magento\Framework\App\Filesystem\DirectoryList::CONFIG
265+
) . '/di.xml';
263266
$this->files['additional'] = [$input->getOption(self::INPUT_KEY_EXTRA_CLASSES_FILE)];
264267
$repositoryScanner = new Scanner\RepositoryScanner();
265268
$repositories = $repositoryScanner->collectEntities($this->files['di']);

setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php

+10-21
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@
1111

1212
class ProxyGenerator implements OperationInterface
1313
{
14-
/**
15-
* @var Scanner\DirectoryScanner
16-
*/
17-
private $directoryScanner;
18-
1914
/**
2015
* @var Scanner\XmlScanner
2116
*/
@@ -27,18 +22,23 @@ class ProxyGenerator implements OperationInterface
2722
private $data;
2823

2924
/**
30-
* @param Scanner\DirectoryScanner $directoryScanner
25+
* @var Scanner\ConfigurationScanner
26+
*/
27+
private $configurationScanner;
28+
29+
/**
3130
* @param Scanner\XmlScanner $proxyScanner
31+
* @param Scanner\ConfigurationScanner $configurationScanner
3232
* @param array $data
3333
*/
3434
public function __construct(
35-
Scanner\DirectoryScanner $directoryScanner,
3635
Scanner\XmlScanner $proxyScanner,
36+
\Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner,
3737
$data = []
3838
) {
39-
$this->directoryScanner = $directoryScanner;
4039
$this->proxyScanner = $proxyScanner;
4140
$this->data = $data;
41+
$this->configurationScanner = $configurationScanner;
4242
}
4343

4444
/**
@@ -48,19 +48,8 @@ public function __construct(
4848
*/
4949
public function doOperation()
5050
{
51-
if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns'])
52-
!== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) {
53-
return;
54-
}
55-
56-
$files = [];
57-
foreach ($this->data['paths'] as $path) {
58-
$files = array_merge_recursive(
59-
$files,
60-
$this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns'])
61-
);
62-
}
63-
$proxies = $this->proxyScanner->collectEntities($files['di']);
51+
$files = $this->configurationScanner->scan('di.xml');
52+
$proxies = $this->proxyScanner->collectEntities($files);
6453
foreach ($proxies as $entityName) {
6554
class_exists($entityName);
6655
}

setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php

+10-21
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@
1212

1313
class RepositoryGenerator implements OperationInterface
1414
{
15-
/**
16-
* @var Scanner\DirectoryScanner
17-
*/
18-
private $directoryScanner;
19-
2015
/**
2116
* @var Scanner\RepositoryScanner
2217
*/
@@ -33,21 +28,26 @@ class RepositoryGenerator implements OperationInterface
3328
private $classesScanner;
3429

3530
/**
36-
* @param Scanner\DirectoryScanner $directoryScanner
31+
* @var Scanner\ConfigurationScanner
32+
*/
33+
private $configurationScanner;
34+
35+
/**
3736
* @param ClassesScanner $classesScanner
3837
* @param Scanner\RepositoryScanner $repositoryScanner
38+
* @param Scanner\ConfigurationScanner $configurationScanner
3939
* @param array $data
4040
*/
4141
public function __construct(
42-
Scanner\DirectoryScanner $directoryScanner,
4342
ClassesScanner $classesScanner,
4443
Scanner\RepositoryScanner $repositoryScanner,
44+
\Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner,
4545
$data = []
4646
) {
47-
$this->directoryScanner = $directoryScanner;
4847
$this->repositoryScanner = $repositoryScanner;
4948
$this->data = $data;
5049
$this->classesScanner = $classesScanner;
50+
$this->configurationScanner = $configurationScanner;
5151
}
5252

5353
/**
@@ -57,23 +57,12 @@ public function __construct(
5757
*/
5858
public function doOperation()
5959
{
60-
if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns'])
61-
!== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) {
62-
return;
63-
}
64-
6560
foreach ($this->data['paths'] as $path) {
6661
$this->classesScanner->getList($path);
6762
}
6863
$this->repositoryScanner->setUseAutoload(false);
69-
$files = [];
70-
foreach ($this->data['paths'] as $path) {
71-
$files = array_merge_recursive(
72-
$files,
73-
$this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns'])
74-
);
75-
}
76-
$repositories = $this->repositoryScanner->collectEntities($files['di']);
64+
$files = $this->configurationScanner->scan('di.xml');
65+
$repositories = $this->repositoryScanner->collectEntities($files);
7766
foreach ($repositories as $entityName) {
7867
class_exists($entityName);
7968
}

setup/src/Magento/Setup/Module/Di/App/Task/Operation/ServiceDataAttributesGenerator.php

+13-20
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@
1616
*/
1717
class ServiceDataAttributesGenerator implements OperationInterface
1818
{
19-
/**
20-
* @var Scanner\DirectoryScanner
21-
*/
22-
private $directoryScanner;
23-
2419
/**
2520
* @var Scanner\ServiceDataAttributesScanner
2621
*/
@@ -32,18 +27,23 @@ class ServiceDataAttributesGenerator implements OperationInterface
3227
private $data;
3328

3429
/**
35-
* @param Scanner\DirectoryScanner $directoryScanner
36-
* @param Scanner\ServiceDataAttributesScanner $repositoryScanner
30+
* @var Scanner\ConfigurationScanner
31+
*/
32+
private $configurationScanner;
33+
34+
/**
35+
* @param Scanner\ServiceDataAttributesScanner $serviceDataAttributesScanner
36+
* @param Scanner\ConfigurationScanner $configurationScanner
3737
* @param array $data
3838
*/
3939
public function __construct(
40-
Scanner\DirectoryScanner $directoryScanner,
41-
Scanner\ServiceDataAttributesScanner $repositoryScanner,
40+
Scanner\ServiceDataAttributesScanner $serviceDataAttributesScanner,
41+
\Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner,
4242
$data = []
4343
) {
44-
$this->directoryScanner = $directoryScanner;
45-
$this->serviceDataAttributesScanner = $repositoryScanner;
44+
$this->serviceDataAttributesScanner = $serviceDataAttributesScanner;
4645
$this->data = $data;
46+
$this->configurationScanner = $configurationScanner;
4747
}
4848

4949
/**
@@ -53,15 +53,8 @@ public function __construct(
5353
*/
5454
public function doOperation()
5555
{
56-
if (array_diff(array_keys($this->data), ['filePatterns', 'paths'])
57-
!== array_diff(['filePatterns', 'paths'], array_keys($this->data))) {
58-
return;
59-
}
60-
$files = [];
61-
foreach ($this->data['paths'] as $path) {
62-
$files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns']));
63-
}
64-
$repositories = $this->serviceDataAttributesScanner->collectEntities($files['extension_attributes']);
56+
$files = $this->configurationScanner->scan('extension_attributes.xml');
57+
$repositories = $this->serviceDataAttributesScanner->collectEntities($files);
6558
foreach ($repositories as $entityName) {
6659
class_exists($entityName);
6760
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Setup\Module\Di\Code\Scanner;
7+
8+
use Magento\Framework\App\Area;
9+
10+
class ConfigurationScanner
11+
{
12+
/**
13+
* ConfigurationScanner constructor.
14+
*
15+
* @param \Magento\Framework\App\Config\FileResolver $fileResolver
16+
* @param \Magento\Framework\App\AreaList $areaList
17+
*/
18+
public function __construct(
19+
\Magento\Framework\App\Config\FileResolver $fileResolver,
20+
\Magento\Framework\App\AreaList $areaList
21+
) {
22+
$this->fileResolver = $fileResolver;
23+
$this->areaList = $areaList;
24+
}
25+
26+
/**
27+
* Scan configuration files
28+
*
29+
* @param string $fileName
30+
*
31+
* @return array array of paths to the configuration files
32+
*/
33+
public function scan($fileName)
34+
{
35+
$files = [];
36+
$areaCodes = array_merge(
37+
['primary', Area::AREA_GLOBAL],
38+
$this->areaList->getCodes()
39+
);
40+
foreach ($areaCodes as $area) {
41+
$files = array_merge_recursive(
42+
$files,
43+
$this->fileResolver->get($fileName, $area)->toArray()
44+
);
45+
}
46+
return array_keys($files);
47+
}
48+
}

0 commit comments

Comments
 (0)