/** * @param Entity $entity */ public function visit(Entity $entity) { $type = $entity->getType(); $class = $entity->getNamespacedName(); $path = $this->getPsr4ClassPath($class); $entity->setPath($path); if (!isset($this->generators[$type])) { return; } $this->generators[$type]->visit($entity); }
/** * @param \Protobuf\Compiler\Entity $entity * * @return bool */ protected function loadEntityClass(Entity $entity) { $type = $entity->getType(); $content = $entity->getContent(); $class = $entity->getNamespacedName(); if (class_exists($class) || interface_exists($class)) { return false; } $this->logger->info(sprintf('Loading class "%s"', $class)); $tempname = tempnam(sys_get_temp_dir(), 'proto') . '.php'; file_put_contents($tempname, $content); include $tempname; @unlink($tempname); if ($type === Entity::TYPE_EXTENSION) { $this->logger->info(sprintf('Registering extension "%s"', $class)); $config = $this->config; $registry = $config->getExtensionRegistry(); $class::registerAllExtensions($registry); return true; } return false; }