Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDK-5377: Introduce array element to env manifeststrategy #161

Merged
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
"ext-dom": "*",
"ext-simplexml": "*",
"ext-json": "*",
"aws/aws-sdk-php": "^3.257",
"composer-plugin-api": "^1.0.0 || ^2.0.0",
"aws/aws-sdk-php": "^3.257",
"composer/composer": "^2.1.0",
"czproject/git-php": "^4.1",
"guzzlehttp/guzzle": "^7.4",
Expand Down
4 changes: 2 additions & 2 deletions src/Builder/ClassBuilderFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public function resolveClass(string $targetClassName, string $customOrganisation
public function storeClass(ClassInformationTransfer $classInformationTransfer): bool
{
return $this->getFactory()
->createClassFileWriter()
->storeClass($classInformationTransfer);
->createFileWriter()
->storeFile($classInformationTransfer);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Builder/ClassGenerator/ClassGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public function generateClass(string $className, ?string $parentClass = null): C

$syntaxTree = [$classNamespaceBuilder->getNode()];

$classInformationTransfer->setClassTokenTree($syntaxTree)
$classInformationTransfer->setTokenTree($syntaxTree)
->setFilePath(
$moduleDir
. '/src'
Expand Down
53 changes: 53 additions & 0 deletions src/Builder/ClassLoader/AbstractLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

declare(strict_types=1);

namespace SprykerSdk\Integrator\Builder\ClassLoader;

use PhpParser\Lexer;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\CloningVisitor;
use PhpParser\NodeVisitor\NameResolver;
use PhpParser\Parser;

abstract class AbstractLoader
{
/**
* @var \PhpParser\Parser
*/
protected $parser;

/**
* @var \PhpParser\Lexer
*/
protected $lexer;

/**
* @param \PhpParser\Parser $parser
* @param \PhpParser\Lexer $lexer
*/
public function __construct(Parser $parser, Lexer $lexer)
{
$this->parser = $parser;
$this->lexer = $lexer;
}

/**
* @param array<\PhpParser\Node\Stmt> $originalSyntaxTree
*
* @return array<\PhpParser\Node>
*/
protected function traverseOriginalSyntaxTree(array $originalSyntaxTree): array
{
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new NameResolver());
$nodeTraverser->addVisitor(new CloningVisitor());

return $nodeTraverser->traverse($originalSyntaxTree);
}
}
45 changes: 3 additions & 42 deletions src/Builder/ClassLoader/ClassLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,44 +10,19 @@
namespace SprykerSdk\Integrator\Builder\ClassLoader;

use Composer\Autoload\ClassLoader as ComposerClassLoader;
use PhpParser\Lexer;
use PhpParser\Node;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\NodeFinder;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\CloningVisitor;
use PhpParser\NodeVisitor\NameResolver;
use PhpParser\Parser;
use SprykerSdk\Integrator\Transfer\ClassInformationTransfer;

class ClassLoader implements ClassLoaderInterface
class ClassLoader extends AbstractLoader implements ClassLoaderInterface
{
/**
* @var \Composer\Autoload\ClassLoader|null
*/
private static ?ComposerClassLoader $composerClassLoader = null;

/**
* @var \PhpParser\Parser
*/
protected $parser;

/**
* @var \PhpParser\Lexer
*/
protected $lexer;

/**
* @param \PhpParser\Parser $parser
* @param \PhpParser\Lexer $lexer
*/
public function __construct(Parser $parser, Lexer $lexer)
{
$this->parser = $parser;
$this->lexer = $lexer;
}

/**
* @param string $className
*
Expand All @@ -74,8 +49,8 @@ public function loadClass(string $className): ClassInformationTransfer
$originalSyntaxTree = $this->parser->parse($fileContents);
$syntaxTree = $originalSyntaxTree ? $this->traverseOriginalSyntaxTree($originalSyntaxTree) : [];

$classInformationTransfer->setClassTokenTree($syntaxTree)
->setOriginalClassTokenTree($originalSyntaxTree)
$classInformationTransfer->setTokenTree($syntaxTree)
->setOriginalTokenTree($originalSyntaxTree)
->setTokens($this->lexer->getTokens())
->setFilePath(realpath($fileName));

Expand Down Expand Up @@ -116,20 +91,6 @@ protected function getParent(array $originalSyntaxTree): ?string
return null;
}

/**
* @param array<\PhpParser\Node\Stmt> $originalSyntaxTree
*
* @return array<\PhpParser\Node>
*/
protected function traverseOriginalSyntaxTree(array $originalSyntaxTree): array
{
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new CloningVisitor());
$nodeTraverser->addVisitor(new NameResolver());

return $nodeTraverser->traverse($originalSyntaxTree);
}

/**
* @param string $className
*
Expand Down
43 changes: 43 additions & 0 deletions src/Builder/ClassLoader/FileLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

declare(strict_types=1);

namespace SprykerSdk\Integrator\Builder\ClassLoader;

use SprykerSdk\Integrator\Transfer\FileInformationTransfer;

class FileLoader extends AbstractLoader implements FileLoaderInterface
{
/**
* @param string $path
*
* @return \SprykerSdk\Integrator\Transfer\FileInformationTransfer
*/
public function loadFile(string $path): FileInformationTransfer
{
$fileInformationTransfer = (new FileInformationTransfer())->setFilePath($path);
if (!file_exists($path)) {
return $fileInformationTransfer;

Check warning on line 25 in src/Builder/ClassLoader/FileLoader.php

View check run for this annotation

Codecov / codecov/patch

src/Builder/ClassLoader/FileLoader.php#L25

Added line #L25 was not covered by tests
}

$fileContents = file_get_contents($path);
if (!$fileContents) {
return $fileInformationTransfer;

Check warning on line 30 in src/Builder/ClassLoader/FileLoader.php

View check run for this annotation

Codecov / codecov/patch

src/Builder/ClassLoader/FileLoader.php#L30

Added line #L30 was not covered by tests
}
$fileInformationTransfer->setContent($fileContents);

$originalSyntaxTree = $this->parser->parse($fileContents);
$syntaxTree = $originalSyntaxTree ? $this->traverseOriginalSyntaxTree($originalSyntaxTree) : [];

$fileInformationTransfer->setTokenTree($syntaxTree)
->setOriginalTokenTree($originalSyntaxTree)
->setTokens($this->lexer->getTokens());

return $fileInformationTransfer;
}
}
22 changes: 22 additions & 0 deletions src/Builder/ClassLoader/FileLoaderInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

declare(strict_types=1);

namespace SprykerSdk\Integrator\Builder\ClassLoader;

use SprykerSdk\Integrator\Transfer\FileInformationTransfer;

interface FileLoaderInterface
{
/**
* @param string $path
*
* @return \SprykerSdk\Integrator\Transfer\FileInformationTransfer
*/
public function loadFile(string $path): FileInformationTransfer;
}
4 changes: 2 additions & 2 deletions src/Builder/ClassModifier/AddVisitorsTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ protected function addVisitorsClassInformationTransfer(ClassInformationTransfer
$nodeTraverser->addVisitor($visitor);
}

$classInformationTransfer->setClassTokenTree(
$nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()),
$classInformationTransfer->setTokenTree(
$nodeTraverser->traverse($classInformationTransfer->getTokenTree()),
);

return $classInformationTransfer;
Expand Down
8 changes: 4 additions & 4 deletions src/Builder/ClassModifier/CommonClass/CommonClassModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public function overrideMethodFromParent(ClassInformationTransfer $classInformat

$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new AddMethodVisitor($methodSyntaxTree));
$classInformationTransfer->setClassTokenTree($nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
$classInformationTransfer->setTokenTree($nodeTraverser->traverse($classInformationTransfer->getTokenTree()));

return $classInformationTransfer;
}
Expand Down Expand Up @@ -156,7 +156,7 @@ public function replaceMethodBody(
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new ReplaceNodePropertiesByNameVisitor($targetMethodName, $methodNodeProperties));
$classInformationTransfer
->setClassTokenTree($nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
->setTokenTree($nodeTraverser->traverse($classInformationTransfer->getTokenTree()));

return $classInformationTransfer;
}
Expand All @@ -172,7 +172,7 @@ public function removeClassMethod(ClassInformationTransfer $classInformationTran
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new RemoveMethodVisitor($methodNameToRemove));
$classInformationTransfer
->setClassTokenTree($nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
->setTokenTree($nodeTraverser->traverse($classInformationTransfer->getTokenTree()));

return $classInformationTransfer;
}
Expand Down Expand Up @@ -234,7 +234,7 @@ protected function appendNonLiteralArrayValueToMethodBody(
$nodeTraverser->addVisitor(new AddStatementToStatementListVisitor($methodName, $arrayItems, $nodeComparer));

return $classInformationTransfer
->setClassTokenTree($nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
->setTokenTree($nodeTraverser->traverse($classInformationTransfer->getTokenTree()));
}

/**
Expand Down
60 changes: 60 additions & 0 deletions src/Builder/ClassModifier/ConfigFile/ConfigFileModifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

declare(strict_types=1);

namespace SprykerSdk\Integrator\Builder\ClassModifier\ConfigFile;

use PhpParser\Node;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\NodeFinder;
use PhpParser\NodeTraverser;
use SprykerSdk\Integrator\Builder\PartialParser\ExpressionPartialParserInterface;
use SprykerSdk\Integrator\Builder\Visitor\AddArrayItemToEnvConfigVisitor;
use SprykerSdk\Integrator\Transfer\FileInformationTransfer;

class ConfigFileModifier implements ConfigFileModifierInterface
{
protected ExpressionPartialParserInterface $expressionPartialParser;

/**
* @param \SprykerSdk\Integrator\Builder\PartialParser\ExpressionPartialParserInterface $expressionPartialParser
*/
public function __construct(ExpressionPartialParserInterface $expressionPartialParser)
{
$this->expressionPartialParser = $expressionPartialParser;
}

/**
* @param \SprykerSdk\Integrator\Transfer\FileInformationTransfer $fileInformationTransfer
* @param string $target
* @param string $value
*
* @return \SprykerSdk\Integrator\Transfer\FileInformationTransfer
*/
public function addArrayItemToEnvConfig(
FileInformationTransfer $fileInformationTransfer,
string $target,
string $value
): FileInformationTransfer {
$valueStm = $this->expressionPartialParser->parse(sprintf('$var = %s;', $value));

/** @var \PhpParser\Node\Expr\ArrayItem|null $arrayItem */
$arrayItem = (new NodeFinder())->findFirst($valueStm, function (Node $node) {
return $node instanceof ArrayItem;
});
if (!$arrayItem) {
return $fileInformationTransfer;

Check warning on line 51 in src/Builder/ClassModifier/ConfigFile/ConfigFileModifier.php

View check run for this annotation

Codecov / codecov/patch

src/Builder/ClassModifier/ConfigFile/ConfigFileModifier.php#L51

Added line #L51 was not covered by tests
}

$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new AddArrayItemToEnvConfigVisitor($target, $arrayItem));

return $fileInformationTransfer
->setTokenTree($nodeTraverser->traverse($fileInformationTransfer->getTokenTree()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

declare(strict_types=1);

namespace SprykerSdk\Integrator\Builder\ClassModifier\ConfigFile;

use SprykerSdk\Integrator\Transfer\FileInformationTransfer;

interface ConfigFileModifierInterface
{
/**
* @param \SprykerSdk\Integrator\Transfer\FileInformationTransfer $fileInformationTransfer
* @param string $target
* @param string $value
*
* @return \SprykerSdk\Integrator\Transfer\FileInformationTransfer
*/
public function addArrayItemToEnvConfig(FileInformationTransfer $fileInformationTransfer, string $target, string $value): FileInformationTransfer;
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@

[$keyClass, $keyConst] = explode('::', $key);
$this->nodeTraverser->addVisitor(new RemoveGlueRelationshipFromClassListVisitor($targetMethodName, $keyClass, $keyConst, $classNameToRemove));
$classInformationTransfer->setClassTokenTree($this->nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
$classInformationTransfer->setTokenTree($this->nodeTraverser->traverse($classInformationTransfer->getTokenTree()));

Check warning on line 55 in src/Builder/ClassModifier/GlueRelationship/Unwire/UnwireGlueRelationshipModifier.php

View check run for this annotation

Codecov / codecov/patch

src/Builder/ClassModifier/GlueRelationship/Unwire/UnwireGlueRelationshipModifier.php#L55

Added line #L55 was not covered by tests

return $classInformationTransfer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
$methodBody = $this->getMethodBody($methodNode, $classNameToAdd, $keyClass, $keyConst);

$this->nodeTraverser->addVisitor(new MethodBodyExtendVisitor($targetMethodName, $methodBody));
$classInformationTransfer->setClassTokenTree($this->nodeTraverser->traverse($classInformationTransfer->getClassTokenTree()));
$classInformationTransfer->setTokenTree($this->nodeTraverser->traverse($classInformationTransfer->getTokenTree()));

Check warning on line 60 in src/Builder/ClassModifier/GlueRelationship/Wire/WireGlueRelationshipModifier.php

View check run for this annotation

Codecov / codecov/patch

src/Builder/ClassModifier/GlueRelationship/Wire/WireGlueRelationshipModifier.php#L60

Added line #L60 was not covered by tests

return $classInformationTransfer;
}
Expand Down
Loading
Loading