24 private $areaCodesList = [];
29 private $interceptionConfig;
44 private $cacheManager;
49 private $interceptableValidator;
59 InterceptionConfig $interceptionConfig,
65 $this->interceptionConfig = $interceptionConfig;
66 $this->pluginList = $pluginList;
67 $this->typeReader = $typeReader;
68 $this->cacheManager = $cacheManager;
69 $this->interceptableValidator = $interceptableValidator;
80 if (empty($this->areaCodesList[$areaCode])) {
81 $this->areaCodesList[] = $areaCode;
94 $inheritedConfig = $this->getPluginsList($interceptedInstances);
95 $mergedAreaPlugins = $this->mergeAreaPlugins($inheritedConfig);
96 $interceptedMethods = $this->getInterceptedMethods($mergedAreaPlugins);
98 return $interceptedMethods;
111 if ($this->interceptionConfig->hasPlugins($definedClass) && $this->typeReader->isConcrete($definedClass)
112 && $this->interceptableValidator->validate($definedClass)
114 $intercepted[] = $definedClass;
127 private function getPluginsList($interceptedInstances)
129 $this->cacheManager->setEnabled([CompiledConfig::TYPE_IDENTIFIER],
true);
130 $this->pluginList->setInterceptedClasses($interceptedInstances);
132 $inheritedConfig = [];
133 foreach ($this->areaCodesList as $areaKey) {
134 $scopePriority = [Area::AREA_GLOBAL];
135 $pluginListCloned = clone $this->pluginList;
136 if ($areaKey != Area::AREA_GLOBAL) {
137 $scopePriority[] = $areaKey;
138 $pluginListCloned->setScopePriorityScheme($scopePriority);
140 $key = implode(
'', $scopePriority);
141 $inheritedConfig[$key] = $this->filterNullInheritance($pluginListCloned->getPluginsConfig());
143 return $inheritedConfig;
152 private function filterNullInheritance($pluginInheritance)
155 foreach ($pluginInheritance as $instance => $plugins) {
156 if ($plugins ===
null || !$this->typeReader->isConcrete($instance)) {
160 $pluginInstances = [];
161 foreach ($plugins as $plugin) {
162 if (in_array($plugin[
'instance'], $pluginInstances)) {
165 $pluginInstances[] = $plugin[
'instance'];
167 $filteredData[$instance] = $pluginInstances;
170 return $filteredData;
179 private function mergeAreaPlugins($inheritedConfig)
183 $mergedConfig = array_merge_recursive($mergedConfig,
$configuration);
185 foreach ($mergedConfig as &$plugins) {
186 $plugins = array_unique($plugins);
189 return $mergedConfig;
198 private function getInterceptedMethods($interceptionConfiguration)
200 $pluginDefinitionList = new \Magento\Framework\Interception\Definition\Runtime();
201 foreach ($interceptionConfiguration as &$plugins) {
202 $pluginsMethods = [];
203 foreach ($plugins as $plugin) {
204 $pluginsMethods = array_unique(
205 array_merge($pluginsMethods, array_keys($pluginDefinitionList->getMethodList($plugin)))
208 $plugins = $pluginsMethods;
210 return $interceptionConfiguration;
getInterceptionConfiguration($definedClasses)
__construct(InterceptionConfig $interceptionConfig, PluginList $pluginList, Type $typeReader, Manager $cacheManager, InterceptableValidator $interceptableValidator)