<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;
use Magento\Framework\Api\AttributeTypeResolverInterface;
use Magento\Framework\Api\ExtensionAttribute\Config;
class AttributeTypeResolver implements AttributeTypeResolverInterface
{
/**
* @var Config
*/
protected $config;
/**
* @var TypeProcessor
*/
protected $typeProcessor;
/**
* @param TypeProcessor $typeProcessor
* @param Config $config
*/
public function __construct(TypeProcessor $typeProcessor, Config $config)
{
$this->config = $config;
$this->typeProcessor = $typeProcessor;
}
/**
* {@inheritdoc}
*/
public function resolveObjectType($attributeCode, $value, $context)
{
if (!is_object($value)) {
throw new \InvalidArgumentException('Provided value is not object type');
}
$data = $this->config->get();
$context = trim($context, '\\');
$config = isset($data[$context]) ? $data[$context] : [];
$output = get_class($value);
if (isset($config[$attributeCode])) {
$type = $config[$attributeCode]['type'];
$output = $this->typeProcessor->getArrayItemType($type);
if (!(class_exists($output) || interface_exists($output))) {
throw new \LogicException(
sprintf(
'The "%s" class doesn\'t exist and the namespace must be specified. Verify and try again.',
$type
)
);
}
}
return $output;
}
}
|