diff --git a/src/OpenApi/Generator/Model/ClassGenerator.php b/src/OpenApi/Generator/Model/ClassGenerator.php index 36b191e589..4806fab414 100644 --- a/src/OpenApi/Generator/Model/ClassGenerator.php +++ b/src/OpenApi/Generator/Model/ClassGenerator.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Stmt; +use PhpParser\Comment\Doc; trait ClassGenerator { @@ -24,7 +25,7 @@ trait ClassGenerator * * @return Stmt\Class_ */ - protected function createModel(string $name, $properties, $methods, bool $hasExtensions = false, $extends = null): Stmt\Class_ + protected function createModel(string $name, $properties, $methods, bool $hasExtensions = false, bool $deprecated = false, $extends = null): Stmt\Class_ { $classExtends = null; if (null !== $extends) { @@ -33,12 +34,24 @@ protected function createModel(string $name, $properties, $methods, bool $hasExt $classExtends = new Name('\ArrayObject'); } + $attributes = []; + if ($deprecated) { + $attributes['comments'] = [new Doc(<<getNaming()->getClassName($name)), [ 'stmts' => array_merge($properties, $methods), 'extends' => $classExtends, - ] + ], + $attributes ); } } diff --git a/src/OpenApi/Generator/ModelGenerator.php b/src/OpenApi/Generator/ModelGenerator.php index 9b61b9e7b5..509d4b6b57 100644 --- a/src/OpenApi/Generator/ModelGenerator.php +++ b/src/OpenApi/Generator/ModelGenerator.php @@ -36,6 +36,7 @@ protected function doCreateModel(BaseClassGuess $class, $properties, $methods): $properties, $methods, \count($class->getExtensionsType()) > 0, + $class->isDeprecated(), $extends ); diff --git a/src/OpenApi/Guesser/OpenApiSchema/SchemaGuesser.php b/src/OpenApi/Guesser/OpenApiSchema/SchemaGuesser.php index 06fb90df7e..af4ab98ca5 100644 --- a/src/OpenApi/Guesser/OpenApiSchema/SchemaGuesser.php +++ b/src/OpenApi/Guesser/OpenApiSchema/SchemaGuesser.php @@ -29,7 +29,7 @@ protected function isPropertyNullable($property): bool */ protected function createClassGuess($object, $reference, $name, $extensions): BaseClassGuess { - $classGuess = new ClassGuess($object, $reference, $this->naming->getClassName($name), $extensions); + $classGuess = new ClassGuess($object, $reference, $this->naming->getClassName($name), $extensions, $object->getDeprecated() ?? false); if ($object->getDiscriminator() instanceof Discriminator && \is_array($object->getEnum()) && \count($object->getEnum()) > 0) { diff --git a/src/OpenApi/Tests/fixtures/deprecated/.jane-openapi b/src/OpenApi/Tests/fixtures/deprecated/.jane-openapi new file mode 100644 index 0000000000..94d3ef24b2 --- /dev/null +++ b/src/OpenApi/Tests/fixtures/deprecated/.jane-openapi @@ -0,0 +1,8 @@ + __DIR__ . '/swagger.yaml', + 'namespace' => 'Jane\OpenApi\Tests\Expected', + 'directory' => __DIR__ . '/generated', + 'use-fixer' => false, +]; diff --git a/src/OpenApi/Tests/fixtures/deprecated/expected/Client.php b/src/OpenApi/Tests/fixtures/deprecated/expected/Client.php new file mode 100644 index 0000000000..ef033a9a74 --- /dev/null +++ b/src/OpenApi/Tests/fixtures/deprecated/expected/Client.php @@ -0,0 +1,17 @@ +email; + } + /** + * + * + * @param string $email + * + * @return self + */ + public function setEmail(string $email) : self + { + $this->email = $email; + return $this; + } + /** + * + * + * @deprecated + * + * @return string + */ + public function getBar() : string + { + return $this->bar; + } + /** + * + * + * @param string $bar + * + * @deprecated + * + * @return self + */ + public function setBar(string $bar) : self + { + $this->bar = $bar; + return $this; + } +} \ No newline at end of file diff --git a/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/FooNormalizer.php b/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/FooNormalizer.php new file mode 100644 index 0000000000..b60394ee2b --- /dev/null +++ b/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/FooNormalizer.php @@ -0,0 +1,46 @@ +setEmail($data->{'email'}); + } + if (property_exists($data, 'bar')) { + $object->setBar($data->{'bar'}); + } + return $object; + } + public function normalize($object, $format = null, array $context = array()) + { + $data = new \stdClass(); + $data->{'email'} = $object->getEmail(); + $data->{'bar'} = $object->getBar(); + return $data; + } +} \ No newline at end of file diff --git a/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/NormalizerFactory.php b/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/NormalizerFactory.php new file mode 100644 index 0000000000..65ae62e6dd --- /dev/null +++ b/src/OpenApi/Tests/fixtures/deprecated/expected/Normalizer/NormalizerFactory.php @@ -0,0 +1,14 @@ +