forked from loafle/openapi-generator-original
Propagate deprecated property through $ref's (#6093)
* Propagate deprecated property through $ref's As $ref is supposed to completely replace the definition of a property, make sure we also include the 'deprecated' property when generating the type of a $ref property. This makes a property $ref'ing a deprecated schema also become deprecated. * Clarify why we're messing around with $ref
This commit is contained in:
parent
6484c03518
commit
c08e80f49b
@ -2850,6 +2850,17 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
|
|
||||||
if (p.getDeprecated() != null) {
|
if (p.getDeprecated() != null) {
|
||||||
property.deprecated = p.getDeprecated();
|
property.deprecated = p.getDeprecated();
|
||||||
|
} else if (p.get$ref() != null) {
|
||||||
|
// Since $ref should be replaced with the model it refers
|
||||||
|
// to, $ref'ing a model with 'deprecated' set should cause
|
||||||
|
// the property to reflect the model's 'deprecated' value.
|
||||||
|
String ref = ModelUtils.getSimpleRef(p.get$ref());
|
||||||
|
if (ref != null) {
|
||||||
|
Schema referencedSchema = ModelUtils.getSchemas(this.openAPI).get(ref);
|
||||||
|
if (referencedSchema != null && referencedSchema.getDeprecated() != null) {
|
||||||
|
property.deprecated = referencedSchema.getDeprecated();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (p.getReadOnly() != null) {
|
if (p.getReadOnly() != null) {
|
||||||
property.isReadOnly = p.getReadOnly();
|
property.isReadOnly = p.getReadOnly();
|
||||||
|
@ -1409,6 +1409,19 @@ public class DefaultCodegenTest {
|
|||||||
Assert.assertFalse(codegen.fromProperty("customerCode",(Schema) requestProperties.get("customerCode")).deprecated);
|
Assert.assertFalse(codegen.fromProperty("customerCode",(Schema) requestProperties.get("customerCode")).deprecated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeprecatedRef() {
|
||||||
|
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/model-deprecated.yaml");
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
final DefaultCodegen codegen = new DefaultCodegen();
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
|
||||||
|
final Map requestProperties = Collections.unmodifiableMap(openAPI.getComponents().getSchemas().get("complex").getProperties());
|
||||||
|
|
||||||
|
Assert.assertTrue(codegen.fromProperty("deprecated", (Schema)requestProperties.get("deprecated")).deprecated);
|
||||||
|
Assert.assertFalse(codegen.fromProperty("current", (Schema)requestProperties.get("current")).deprecated);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void integerSchemaPropertyAndModelTest() {
|
public void integerSchemaPropertyAndModelTest() {
|
||||||
OpenAPI openAPI = TestUtils.createOpenAPI();
|
OpenAPI openAPI = TestUtils.createOpenAPI();
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
openapi: 3.0.1
|
||||||
|
info:
|
||||||
|
version: 1.0.0
|
||||||
|
title: Example
|
||||||
|
license:
|
||||||
|
name: MIT
|
||||||
|
servers:
|
||||||
|
- url: http://api.example.xyz/v1
|
||||||
|
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
deprecated:
|
||||||
|
type: object
|
||||||
|
deprecated: true
|
||||||
|
properties:
|
||||||
|
customerCode:
|
||||||
|
type: string
|
||||||
|
example: '0001'
|
||||||
|
firstName:
|
||||||
|
type: string
|
||||||
|
example: 'first'
|
||||||
|
current:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
customerCode:
|
||||||
|
type: string
|
||||||
|
example: '0001'
|
||||||
|
firstName:
|
||||||
|
type: string
|
||||||
|
example: 'first'
|
||||||
|
complex:
|
||||||
|
properties:
|
||||||
|
deprecated:
|
||||||
|
$ref: "#/components/schemas/deprecated"
|
||||||
|
current:
|
||||||
|
type: boolean
|
Loading…
x
Reference in New Issue
Block a user