/**
  * Retrieve instance type with interception processing
  *
  * @param string $instanceName
  * @return string
  */
 public function getInstanceType($instanceName)
 {
     $type = parent::getInstanceType($instanceName);
     if ($this->interceptionConfig && $this->interceptionConfig->hasPlugins($instanceName) && $this->interceptableValidator->validate($instanceName)) {
         return $type . '\\Interceptor';
     }
     return $type;
 }
 /**
  * @dataProvider getInterceptionConfigurationDataProvider
  */
 public function testGetInterceptionConfiguration($plugins)
 {
     $definedClasses = ['Class1'];
     $this->interceptionConfig->expects($this->once())->method('hasPlugins')->with('Class1')->willReturn(true);
     $this->typeReader->expects($this->any())->method('isConcrete')->willReturnMap([['Class1', true], ['instance', true]]);
     $this->interceptableValidator->expects($this->any())->method('validate')->with('Class1')->willReturn(true);
     $this->cacheManager->expects($this->once())->method('setEnabled')->with([CompiledConfig::TYPE_IDENTIFIER], true);
     $this->pluginList->expects($this->once())->method('setInterceptedClasses')->with($definedClasses);
     $this->pluginList->expects($this->once())->method('setScopePriorityScheme')->with(['global', 'areaCode']);
     $this->pluginList->expects($this->once())->method('getPluginsConfig')->willReturn(['instance' => $plugins]);
     $this->model->addAreaCode('areaCode');
     $this->model->getInterceptionConfiguration($definedClasses);
 }
 /**
  * Get intercepted class names
  *
  * @param array $classes
  * @param array $interceptedEntities
  * @return array
  */
 public function collectEntities(array $classes, array $interceptedEntities = [])
 {
     $output = [];
     foreach ($classes as $class) {
         foreach ($interceptedEntities as $interceptorClass) {
             $interceptedEntity = substr($interceptorClass, 0, -12);
             if (is_subclass_of($class, $interceptedEntity) && $this->interceptableValidator->validate($class)) {
                 $reflectionClass = new \ReflectionClass($class);
                 if (!$reflectionClass->isAbstract() && !$reflectionClass->isFinal()) {
                     $output[] = $class . '\\Interceptor';
                 }
             }
         }
     }
     $output = array_merge($this->filterOutAbstractClasses($interceptedEntities), $output);
     $output = array_unique($output);
     return $output;
 }
 /**
  * Get intercepted instances from defined class list
  *
  * @param array $definedClasses
  * @return array
  */
 private function getInterceptedClasses($definedClasses)
 {
     $intercepted = [];
     foreach ($definedClasses as $definedClass) {
         if ($this->interceptionConfig->hasPlugins($definedClass) && $this->typeReader->isConcrete($definedClass) && $this->interceptableValidator->validate($definedClass)) {
             $intercepted[] = $definedClass;
         }
     }
     return $intercepted;
 }