mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
194 lines
5.5 KiB
PHP
194 lines
5.5 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Developer\Model\Di;
|
|
|
|
class Information
|
|
{
|
|
/**
|
|
* @var \Magento\Framework\ObjectManager\ConfigInterface
|
|
*/
|
|
private $objectManagerConfig;
|
|
|
|
/**
|
|
* @var \Magento\Developer\Model\Di\PluginList
|
|
*/
|
|
private $pluginList;
|
|
|
|
/**
|
|
* @var string[]
|
|
*/
|
|
private $preferences = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $virtualTypes = [];
|
|
|
|
/**
|
|
* @var \Magento\Framework\ObjectManager\DefinitionInterface
|
|
*/
|
|
private $definitions;
|
|
|
|
/**
|
|
* @param \Magento\Framework\ObjectManager\ConfigInterface $objectManagerConfig
|
|
* @param \Magento\Framework\ObjectManager\DefinitionInterface $definitions
|
|
* @param \Magento\Developer\Model\Di\PluginList $pluginList
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\ObjectManager\ConfigInterface $objectManagerConfig,
|
|
\Magento\Framework\ObjectManager\DefinitionInterface $definitions,
|
|
\Magento\Developer\Model\Di\PluginList $pluginList
|
|
) {
|
|
$this->objectManagerConfig = $objectManagerConfig;
|
|
$this->definitions = $definitions;
|
|
$this->pluginList = $pluginList;
|
|
}
|
|
|
|
/**
|
|
* Get info on the preference for the class
|
|
*
|
|
* @param string $className
|
|
* @return string
|
|
*/
|
|
public function getPreference($className)
|
|
{
|
|
if (!isset($this->preferences[$className])) {
|
|
$this->preferences[$className] = $this->objectManagerConfig->getPreference($className);
|
|
}
|
|
return $this->preferences[$className];
|
|
}
|
|
|
|
/**
|
|
* Retrieve parameters of the constructor for the preference of the class
|
|
*
|
|
* @param string $className
|
|
* @return array|null
|
|
*/
|
|
private function getConstructorParameters($className)
|
|
{
|
|
$parameters = $this->definitions->getParameters($className);
|
|
return $parameters;
|
|
}
|
|
|
|
/**
|
|
* Retrieve array of parameters for the class constructor
|
|
*
|
|
* @param string $className
|
|
* @return array
|
|
*/
|
|
public function getParameters($className)
|
|
{
|
|
$result = [];
|
|
$diConfiguration = $this->getConfiguredConstructorParameters($className);
|
|
$originalParameters = $this->isVirtualType($className) ?
|
|
$this->getConstructorParameters($this->getVirtualTypeBase($className)) :
|
|
$this->getConstructorParameters($this->getPreference($className));
|
|
|
|
if (!$originalParameters) {
|
|
return $result;
|
|
}
|
|
|
|
foreach ($originalParameters as $parameter) {
|
|
$paramArray = [$parameter[0], $parameter[1], is_array($parameter[3]) ? "<empty array>" : $parameter[3]];
|
|
if (isset($diConfiguration[$parameter[0]])) {
|
|
$paramArray[2] = $this->renderParameters($diConfiguration[$parameter[0]]);
|
|
}
|
|
$result[] = $paramArray;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Recursively retrieve array parameters
|
|
*
|
|
* @param string $configuredParameter
|
|
* @return array|null
|
|
*/
|
|
private function renderParameters($configuredParameter)
|
|
{
|
|
$result = null;
|
|
if (is_array($configuredParameter)) {
|
|
if (isset($configuredParameter['instance'])) {
|
|
$result = 'instance of ' . $configuredParameter['instance'];
|
|
} else {
|
|
foreach ($configuredParameter as $keyName => $instance) {
|
|
$result[$keyName] = $this->renderParameters($instance);
|
|
}
|
|
}
|
|
} else {
|
|
$result = 'string ' . $configuredParameter;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Retrieve configured types of parameters of the constructor for the preference of the class
|
|
*
|
|
* @param string $className
|
|
* @return array|null
|
|
*/
|
|
private function getConfiguredConstructorParameters($className)
|
|
{
|
|
return $this->objectManagerConfig->getArguments($className);
|
|
}
|
|
|
|
/**
|
|
* Retrieve virtual types for the class and the preference of the class
|
|
*
|
|
* @param string $className
|
|
* @return array
|
|
*/
|
|
public function getVirtualTypes($className)
|
|
{
|
|
$preference = $this->getPreference($className);
|
|
if (!isset($this->virtualTypes[$className])) {
|
|
$this->virtualTypes[$className] = [];
|
|
foreach ($this->objectManagerConfig->getVirtualTypes() as $virtualType => $baseName) {
|
|
if ($baseName == $className || $baseName == $preference) {
|
|
$this->virtualTypes[$className][] = $virtualType;
|
|
}
|
|
}
|
|
}
|
|
return $this->virtualTypes[$className];
|
|
}
|
|
|
|
/**
|
|
* @param string $className
|
|
* @return array
|
|
*/
|
|
public function getPlugins($className)
|
|
{
|
|
return $this->pluginList->getPluginsListByClass($className);
|
|
}
|
|
|
|
/**
|
|
* Is the class a virtual type
|
|
*
|
|
* @param string $className
|
|
* @return boolean
|
|
*/
|
|
public function isVirtualType($className)
|
|
{
|
|
$virtualTypes = $this->objectManagerConfig->getVirtualTypes();
|
|
return isset($virtualTypes[$className]);
|
|
}
|
|
|
|
/**
|
|
* Get base class for the Virtual Type
|
|
*
|
|
* @param string $className
|
|
* @return string|boolean
|
|
*/
|
|
public function getVirtualTypeBase($className)
|
|
{
|
|
$virtualTypes = $this->objectManagerConfig->getVirtualTypes();
|
|
if (isset($virtualTypes[$className])) {
|
|
return $virtualTypes[$className];
|
|
}
|
|
return false;
|
|
}
|
|
}
|