diff --git a/src/Generator.php b/src/Generator.php index a6a4a76..cb5aaaa 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -176,15 +176,17 @@ private function all(string $namespace): iterable ); } - foreach ($schemaRegistry->unknownSchemas() as $schema) { - yield from Schema::generate( - $schema['name'], - $this->dirname($namespace . 'Schema/' . $schema['className']), - $this->basename($namespace . 'Schema/' . $schema['className']), - $schema['schema'], - $schemaRegistry, - $namespace . 'Schema' - ); + while ($schemaRegistry->hasUnknownSchemas()) { + foreach ($schemaRegistry->unknownSchemas() as $schema) { + yield from Schema::generate( + $schema['name'], + $this->dirname($namespace . 'Schema/' . $schema['className']), + $this->basename($namespace . 'Schema/' . $schema['className']), + $schema['schema'], + $schemaRegistry, + $namespace . 'Schema' + ); + } } } diff --git a/src/SchemaRegistry.php b/src/SchemaRegistry.php index 02976c8..c34a94f 100644 --- a/src/SchemaRegistry.php +++ b/src/SchemaRegistry.php @@ -49,8 +49,15 @@ public function get(\cebe\openapi\spec\Schema $schema, string $fallbackName = '' return $className; } + public function hasUnknownSchemas(): bool + { + return count($this->unknownSchemas) > 0; + } + public function unknownSchemas(): iterable { - yield from $this->unknownSchemas; + $unknownSchemas = $this->unknownSchemas; + $this->unknownSchemas = []; + yield from $unknownSchemas; } }