describers = $describers; $this->modelDescribers = $modelDescribers; $this->cacheItemPool = $cacheItemPool; $this->cacheItemId = $cacheItemId; } public function setAlternativeNames(array $alternativeNames) { $this->alternativeNames = $alternativeNames; } public function generate(): OpenApi { if (null !== $this->openApi) { return $this->openApi; } if ($this->cacheItemPool) { $item = $this->cacheItemPool->getItem($this->cacheItemId ?? 'openapi_doc'); if ($item->isHit()) { return $this->openApi = $item->get(); } } $this->openApi = new OpenApi([]); $modelRegistry = new ModelRegistry($this->modelDescribers, $this->openApi, $this->alternativeNames); foreach ($this->describers as $describer) { if ($describer instanceof ModelRegistryAwareInterface) { $describer->setModelRegistry($modelRegistry); } $describer->describe($this->openApi); } $modelRegistry->registerSchemas(); if (isset($item)) { $this->cacheItemPool->save($item->set($this->openApi)); } return $this->openApi; } }