/**
  * @param Configuration $config
  * @return FactoryDependencyInjectionContainer
  */
 public function getContainer(Configuration $config)
 {
     $generator = new WritingFactoryGenerator($config, __DIR__ . '/_factories');
     $fileReflection = new \Zend\Code\Reflection\FileReflection(__DIR__ . '/test_classes.php');
     $classes = $fileReflection->getClasses();
     foreach ($classes as $class) {
         /** @var \ReflectionClass $class */
         $generator->processFileForClass($class->getName());
     }
     return new FactoryOnlyDependencyInjectionContainer($config);
 }
 /**
  * Ensure that all classes extended from extensible classes implement getter and setter for extension attributes.
  */
 public function testExtensibleClassesWithMissingInterface()
 {
     $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
     $invoker(function ($filename) {
         $errors = [];
         $fileContent = file_get_contents($filename);
         $extensibleClassPattern = 'class [^\\{]+extends[^\\{]+AbstractExtensible';
         $abstractExtensibleClassPattern = 'abstract ' . $extensibleClassPattern;
         if (preg_match('/' . $extensibleClassPattern . '/', $fileContent) && !preg_match('/' . $abstractExtensibleClassPattern . '/', $fileContent)) {
             $fileReflection = new \Zend\Code\Reflection\FileReflection($filename, true);
             foreach ($fileReflection->getClasses() as $classReflection) {
                 if ($classReflection->isSubclassOf(self::EXTENSIBLE_DATA_INTERFACE)) {
                     $methodsToCheck = ['setExtensionAttributes', 'getExtensionAttributes'];
                     foreach ($methodsToCheck as $methodName) {
                         try {
                             $classReflection->getMethod($methodName);
                         } catch (\ReflectionException $e) {
                             $className = $classReflection->getName();
                             $errors[] = "'{$className}::{$methodName}()' must be declared or " . "'{$className}' should not be inherited from extensible class.";
                         }
                     }
                 }
             }
         }
         $this->assertEmpty($errors, "Error validating {$filename}\n" . print_r($errors, true));
     }, $this->getPhpFiles());
 }