Skip to content

Commit

Permalink
fixed uses deprecated getClass function
Browse files Browse the repository at this point in the history
  • Loading branch information
ProkopovVitaliy committed Feb 2, 2021
1 parent 2fd54c2 commit 9669403
Show file tree
Hide file tree
Showing 10 changed files with 198 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
use PHPMD\AbstractRule;
use PHPMD\Node\ClassNode;
use PHPMD\Rule\ClassAware;
use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* Session and Cookies must be used only in HTML Presentation layer.
Expand Down Expand Up @@ -105,7 +108,8 @@ private function isControllerPlugin(\ReflectionClass $class): bool
foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
if (preg_match('/^(after|around|before).+/i', $method->getName())) {
try {
$argument = $method->getParameters()[0]->getClass();
$parameter = $method->getParameters()[0];
$argument = $this->getParameterClass($parameter);
} catch (\Throwable $exception) {
//Non-existing class (autogenerated perhaps) or doesn't have an argument.
continue;
Expand Down Expand Up @@ -134,7 +138,8 @@ private function isBlockPlugin(\ReflectionClass $class): bool
foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
if (preg_match('/^(after|around|before).+/i', $method->getName())) {
try {
$argument = $method->getParameters()[0]->getClass();
$parameter = $method->getParameters()[0];
$argument = $this->getParameterClass($parameter);
} catch (\Throwable $exception) {
//Non-existing class (autogenerated perhaps) or doesn't have an argument.
continue;
Expand Down Expand Up @@ -164,7 +169,7 @@ private function doesUseRestrictedClasses(\ReflectionClass $class): bool
if ($constructor) {
foreach ($constructor->getParameters() as $argument) {
try {
if ($class = $argument->getClass()) {
if ($class = $this->getParameterClass($argument)) {
if ($class->isSubclassOf(\Magento\Framework\Session\SessionManagerInterface::class)
|| $class->getName() === \Magento\Framework\Session\SessionManagerInterface::class
|| $class->isSubclassOf(\Magento\Framework\Stdlib\Cookie\CookieReaderInterface::class)
Expand All @@ -183,6 +188,22 @@ private function doesUseRestrictedClasses(\ReflectionClass $class): bool
return false;
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}

/**
* @inheritdoc
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
use Laminas\Code\Reflection\ClassReflection;
use Laminas\Code\Reflection\FileReflection;
use Laminas\Code\Reflection\ParameterReflection;
use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* Provide dependencies for the file
Expand Down Expand Up @@ -39,7 +42,7 @@ public function getDependencies(FileReflection $fileReflection)
foreach ($method->getParameters() as $parameter) {
try {
/** @var ParameterReflection $parameter */
$dependency = $parameter->getClass();
$dependency = $this->getParameterClass($parameter);
if ($dependency instanceof ClassReflection) {
$this->dependencies[] = $dependency->getName();
}
Expand All @@ -56,4 +59,20 @@ public function getDependencies(FileReflection $fileReflection)
return $this->dependencies;
}
/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();
return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
namespace Magento\Test\Integrity;

use Magento\Framework\App\Utility\Files;
use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* Tests @api annotated code integrity
Expand Down Expand Up @@ -277,7 +280,7 @@ private function checkParameters($class, \ReflectionMethod $method, array $nonPu
&& !$parameter->getType()->isBuiltin()
&& !$this->isGenerated($parameter->getType()->getName())
) {
$parameterClass = $parameter->getClass();
$parameterClass = $this->getParameterClass($parameter);
/*
* We don't want to check integrity of @api coverage of classes
* that belong to different vendors, because it is too complicated.
Expand All @@ -286,7 +289,7 @@ private function checkParameters($class, \ReflectionMethod $method, array $nonPu
* we don't want to fail test, because Zend is considered public by default,
* and we don't care if Zend classes are @api-annotated
*/
if (!$parameterClass->isInternal()
if ($parameterClass && !$parameterClass->isInternal()
&& $this->areClassesFromSameVendor($parameterClass->getName(), $class)
&& !$this->isPublished($parameterClass)
) {
Expand All @@ -296,4 +299,20 @@ private function checkParameters($class, \ReflectionMethod $method, array $nonPu
}
return $nonPublishedClasses;
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}
}
23 changes: 21 additions & 2 deletions lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
namespace Magento\Framework\Code\Generator;

use Laminas\Code\Generator\ValueGenerator;
use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* Abstract entity
Expand Down Expand Up @@ -328,9 +331,9 @@ private function extractParameterType(
if ($parameter->hasType()) {
if ($parameter->isArray()) {
$typeName = 'array';
} elseif ($parameter->getClass()) {
} elseif ($parameterClass = $this->getParameterClass($parameter)) {
$typeName = $this->_getFullyQualifiedClassName(
$parameter->getClass()->getName()
$parameterClass->getName()
);
} elseif ($parameter->isCallable()) {
$typeName = 'callable';
Expand All @@ -346,6 +349,22 @@ private function extractParameterType(
return $typeName;
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}

/**
* Extract parameter default value
*
Expand Down
24 changes: 22 additions & 2 deletions lib/internal/Magento/Framework/Code/Reader/ArgumentsReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
*/
namespace Magento\Framework\Code\Reader;

use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* The class arguments reader
*/
Expand Down Expand Up @@ -98,8 +102,8 @@ public function getConstructorArguments(\ReflectionClass $class, $groupByPositio
*/
private function processType(\ReflectionClass $class, \Laminas\Code\Reflection\ParameterReflection $parameter)
{
if ($parameter->getClass()) {
return NamespaceResolver::NS_SEPARATOR . $parameter->getClass()->getName();
if ($parameterClass = $this->getParameterClass($parameter)) {
return NamespaceResolver::NS_SEPARATOR . $parameterClass->getName();
}

$type = $parameter->detectType();
Expand All @@ -121,6 +125,22 @@ private function processType(\ReflectionClass $class, \Laminas\Code\Reflection\P
return $type;
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}

/**
* Get arguments of parent __construct call
*
Expand Down
6 changes: 4 additions & 2 deletions lib/internal/Magento/Framework/Code/Reader/ClassReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ public function getConstructor($className)
/** @var $parameter ReflectionParameter */
foreach ($constructor->getParameters() as $parameter) {
try {
$parameterClass = $this->getParameterClass($parameter);

$result[] = [
$parameter->getName(),
$this->getParameterClass($parameter),
$parameterClass ? $parameterClass->getName() : null,
!$parameter->isOptional() && !$parameter->isDefaultValueAvailable(),
$this->getReflectionParameterDefaultValue($parameter),
$parameter->isVariadic(),
Expand All @@ -56,7 +58,7 @@ public function getConstructor($className)

/**
* Get class by reflection parameter
*
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
*/
namespace Magento\Framework\Code\Reader;

use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

class SourceArgumentsReader
{
/**
Expand Down Expand Up @@ -61,7 +65,7 @@ public function getConstructorArgumentTypes(
$typeName = 'array';
} else {
try {
$paramClass = $param->getClass();
$paramClass = $this->getParameterClass($param);
if ($paramClass) {
$typeName = '\\' .$paramClass->getName();
}
Expand All @@ -81,6 +85,22 @@ public function getConstructorArgumentTypes(
return $types;
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}

/**
* Perform namespace resolution if required and return fully qualified name.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
use Magento\Framework\Code\Reader\ArgumentsReader;
use Magento\Framework\Exception\ValidatorException;
use Magento\Framework\Phrase;
use ReflectionClass;
use ReflectionException;
use ReflectionParameter;

/**
* @SuppressWarnings(PHPMD.NPathComplexity)
Expand Down Expand Up @@ -162,16 +165,32 @@ protected function validateMethodsParameters(array $pluginParameters, array $ori
/**
* Get parameters type
*
* @param \ReflectionParameter $parameter
* @param ReflectionParameter $parameter
*
* @return string
*/
protected function getParametersType(\ReflectionParameter $parameter)
protected function getParametersType(ReflectionParameter $parameter)
{
$parameterClass = $parameter->getClass();
$parameterClass = $this->getParameterClass($parameter);
return $parameterClass ? '\\' . $parameterClass->getName() : ($parameter->isArray() ? 'array' : null);
}

/**
* Get class by reflection parameter
*
* @param ReflectionParameter $reflectionParameter
* @return ReflectionClass|null
* @throws ReflectionException
*/
private function getParameterClass(ReflectionParameter $reflectionParameter): ?ReflectionClass
{
$parameterType = $reflectionParameter->getType();

return $parameterType && !$parameterType->isBuiltin()
? new ReflectionClass($parameterType->getName())
: null;
}

/**
* Get intercepted method name
*
Expand Down
Loading

0 comments on commit 9669403

Please sign in to comment.