Skip to content

Commit 2c4e473

Browse files
author
Yevhen Miroshnychenko
committed
MAGETWO-92986: Write Logs for Failed Process of Generating Factories in Extensions
1 parent 5c253f0 commit 2c4e473

File tree

4 files changed

+42
-47
lines changed

4 files changed

+42
-47
lines changed

lib/internal/Magento/Framework/Code/Generator.php

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
use Magento\Framework\Code\Generator\DefinedClasses;
99
use Magento\Framework\Code\Generator\EntityAbstract;
10+
use Magento\Framework\Code\Generator\Io;
11+
use Magento\Framework\ObjectManagerInterface;
1012
use Psr\Log\LoggerInterface;
13+
use Magento\Framework\Phrase;
14+
use Magento\Framework\Filesystem\Driver\File;
1115

1216
class Generator
1317
{
@@ -18,7 +22,7 @@ class Generator
1822
const GENERATION_SKIP = 'skip';
1923

2024
/**
21-
* @var \Magento\Framework\Code\Generator\Io
25+
* @var Io
2226
*/
2327
protected $_ioObject;
2428

@@ -33,24 +37,21 @@ class Generator
3337
protected $definedClasses;
3438

3539
/**
36-
* @var \Magento\Framework\ObjectManagerInterface
40+
* @var ObjectManagerInterface
3741
*/
3842
protected $objectManager;
3943

4044
/**
41-
* @param Generator\Io $ioObject
42-
* @param array $generatedEntities
45+
* @param Generator\Io $ioObject
46+
* @param array $generatedEntities
4347
* @param DefinedClasses $definedClasses
4448
*/
4549
public function __construct(
46-
\Magento\Framework\Code\Generator\Io $ioObject = null,
50+
Io $ioObject = null,
4751
array $generatedEntities = [],
4852
DefinedClasses $definedClasses = null
4953
) {
50-
$this->_ioObject = $ioObject
51-
?: new \Magento\Framework\Code\Generator\Io(
52-
new \Magento\Framework\Filesystem\Driver\File()
53-
);
54+
$this->_ioObject = $ioObject ?: new Io(new File());
5455
$this->definedClasses = $definedClasses ?: new DefinedClasses();
5556
$this->_generatedEntities = $generatedEntities;
5657
}
@@ -132,7 +133,7 @@ public function generateClass($className)
132133
* @param string $generatorClass
133134
* @param string $entityName
134135
* @param string $className
135-
* @return \Magento\Framework\Code\Generator\EntityAbstract
136+
* @return EntityAbstract
136137
*/
137138
protected function createGeneratorInstance($generatorClass, $entityName, $className)
138139
{
@@ -145,10 +146,10 @@ protected function createGeneratorInstance($generatorClass, $entityName, $classN
145146
/**
146147
* Set object manager instance.
147148
*
148-
* @param \Magento\Framework\ObjectManagerInterface $objectManager
149+
* @param ObjectManagerInterface $objectManager
149150
* @return $this
150151
*/
151-
public function setObjectManager(\Magento\Framework\ObjectManagerInterface $objectManager)
152+
public function setObjectManager(ObjectManagerInterface $objectManager)
152153
{
153154
$this->objectManager = $objectManager;
154155
return $this;
@@ -157,11 +158,11 @@ public function setObjectManager(\Magento\Framework\ObjectManagerInterface $obje
157158
/**
158159
* Get object manager instance.
159160
*
160-
* @return \Magento\Framework\ObjectManagerInterface
161+
* @return ObjectManagerInterface
161162
*/
162163
public function getObjectManager()
163164
{
164-
if (!($this->objectManager instanceof \Magento\Framework\ObjectManagerInterface)) {
165+
if (!($this->objectManager instanceof ObjectManagerInterface)) {
165166
throw new \LogicException(
166167
"Object manager was expected to be set using setObjectManger() "
167168
. "before getObjectManager() invocation."
@@ -174,7 +175,7 @@ public function getObjectManager()
174175
* Try to load/generate source class to check if it is valid or not.
175176
*
176177
* @param string $className
177-
* @param \Magento\Framework\Code\Generator\EntityAbstract $generator
178+
* @param EntityAbstract $generator
178179
* @return void
179180
* @throws \RuntimeException
180181
*/
@@ -183,7 +184,7 @@ protected function tryToLoadSourceClass($className, $generator)
183184
$sourceClassName = $generator->getSourceClassName();
184185
if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
185186
if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) {
186-
$phrase = new \Magento\Framework\Phrase(
187+
$phrase = new Phrase(
187188
'Source class "%1" for "%2" generation does not exist.',
188189
[$sourceClassName, $className]
189190
);

lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public function generate()
112112
} catch (FileSystemException $e) {
113113
$message = 'Error: an object of a generated class may be a dependency for another object, but this '
114114
. 'dependency has not been defined or set correctly in the signature of the related construct method. '
115-
. 'Due to the current error, executing the CLI commands `bin/magento setup:di:compile` or `bin/magento'
116-
. ' deploy:mode:set production` does not create the required generated classes. '
115+
. 'Due to the current error, executing the CLI commands `bin/magento setup:di:compile` or `bin/magento '
116+
. 'deploy:mode:set production` does not create the required generated classes. '
117117
. 'Magento cannot write a class file to the "generated" directory that is read-only. Before using the '
118118
. 'read-only file system, the classes to be generated must be created beforehand in the "generated" '
119119
. 'directory. For details, see the "File systems access permissions" topic '

lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Magento\Framework\Code\Generator\Io;
1515
use Magento\Framework\Code\Generator\ClassGenerator;
1616
use Magento\Framework\Code\Generator\DefinedClasses;
17+
use \PHPUnit_Framework_MockObject_MockObject as Mock;
1718

1819
class EntityAbstractTest extends TestCase
1920
{
@@ -43,7 +44,7 @@ class EntityAbstractTest extends TestCase
4344
/**
4445
* Model under test
4546
*
46-
* @var \Magento\Framework\Code\Generator\EntityAbstract| \PHPUnit_Framework_MockObject_MockObject
47+
* @var EntityAbstract|Mock
4748
*/
4849
protected $_model;
4950

@@ -75,22 +76,11 @@ public function testConstruct()
7576
$this->assertAttributeEmpty('_sourceClassName', $this->_model);
7677
$this->assertAttributeEmpty('_resultClassName', $this->_model);
7778
$this->assertAttributeInstanceOf(Io::class, '_ioObject', $this->_model);
78-
$this->assertAttributeInstanceOf(
79-
ClassGenerator::class,
80-
'_classGenerator',
81-
$this->_model
82-
);
83-
$this->assertAttributeInstanceOf(
84-
DefinedClasses::class,
85-
'definedClasses',
86-
$this->_model
87-
);
79+
$this->assertAttributeInstanceOf(ClassGenerator::class, '_classGenerator', $this->_model);
80+
$this->assertAttributeInstanceOf(DefinedClasses::class, 'definedClasses', $this->_model);
8881

8982
// with source class name
90-
$this->_model = $this->getMockForAbstractClass(
91-
EntityAbstract::class,
92-
[$this->sourceClass]
93-
);
83+
$this->_model = $this->getMockForAbstractClass(EntityAbstract::class, [$this->sourceClass]);
9484
$this->assertAttributeEquals($this->sourceClass, '_sourceClassName', $this->_model);
9585
$this->assertAttributeEquals($this->sourceClass . 'Abstract', '_resultClassName', $this->_model);
9686

@@ -163,17 +153,17 @@ public function generateDataProvider()
163153
* @param bool $willWriteCode
164154
*
165155
* @dataProvider generateDataProvider
166-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::generate
167-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::getErrors
168-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::getSourceClassName
169-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_getResultClassName
170-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_getDefaultResultClassName
171-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_generateCode
172-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_addError
173-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_validateData
174-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_getClassDocBlock
175-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_getGeneratedCode
176-
* @covers \Magento\Framework\Code\Generator\EntityAbstract::_fixCodeStyle
156+
* @covers EntityAbstract::generate
157+
* @covers EntityAbstract::getErrors
158+
* @covers EntityAbstract::getSourceClassName
159+
* @covers EntityAbstract::_getResultClassName
160+
* @covers EntityAbstract::_getDefaultResultClassName
161+
* @covers EntityAbstract::_generateCode
162+
* @covers EntityAbstract::_addError
163+
* @covers EntityAbstract::_validateData
164+
* @covers EntityAbstract::_getClassDocBlock
165+
* @covers EntityAbstract::_getGeneratedCode
166+
* @covers EntityAbstract::_fixCodeStyle
177167
*/
178168
public function testGenerate(
179169
$errors = [],
@@ -238,7 +228,7 @@ public function testGenerateFailure()
238228

239229
$arguments = $this->_prepareMocksForGenerateCode(true);
240230

241-
/** @var \Magento\Framework\Code\Generator\Io|\PHPUnit_Framework_MockObject_MockObject $ioObjectMock */
231+
/** @var Io|Mock $ioObjectMock */
242232
$ioObjectMock = $arguments['io_object'];
243233
$ioObjectMock->expects($this->once())
244234
->method('writeResultFile')
@@ -344,7 +334,7 @@ protected function _prepareMocksForGenerateCode($willWriteCode)
344334
->will($this->returnValue($willWriteCode ? self::RESULT_CODE : null));
345335

346336
// Add configuration for the generation step
347-
/** @var $ioObject \PHPUnit_Framework_MockObject_MockObject */
337+
/** @var Io|Mock $ioObject */
348338
$ioObject = $mocks['io_object'];
349339
if ($willWriteCode) {
350340
$ioObject->expects($this->once())->method('writeResultFile')->with(self::RESULT_FILE, self::RESULT_CODE);

lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class GeneratorTest extends TestCase
4949
protected $ioObjectMock;
5050

5151
/**
52-
* @var DefinedClasses | Mock
52+
* @var DefinedClasses|Mock
5353
*/
5454
protected $definedClassesMock;
5555

@@ -81,6 +81,8 @@ public function testGetGeneratedEntities()
8181
}
8282

8383
/**
84+
* @param string $className
85+
* @param string $entityType
8486
* @expectedException \RuntimeException
8587
* @dataProvider generateValidClassDataProvider
8688
*/
@@ -134,7 +136,9 @@ public function testGenerateClassWithErrors()
134136
];
135137
$expectedEntities = array_values($this->expectedEntities);
136138
$resultClassName = self::SOURCE_CLASS . ucfirst(array_shift($expectedEntities));
139+
/** @var ObjectManagerInterface|Mock $objectManagerMock */
137140
$objectManagerMock = $this->createMock(ObjectManagerInterface::class);
141+
/** @var EntityAbstract|Mock $entityGeneratorMock */
138142
$entityGeneratorMock = $this->getMockBuilder(EntityAbstract::class)
139143
->disableOriginalConstructor()
140144
->getMock();

0 commit comments

Comments
 (0)