diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 2480fa24fc9..71bb39fee08 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2850,6 +2850,17 @@ public class DefaultCodegen implements CodegenConfig { if (p.getDeprecated() != null) { 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) { property.isReadOnly = p.getReadOnly(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index bebe90010f7..45b7c529816 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -1409,6 +1409,19 @@ public class DefaultCodegenTest { 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 public void integerSchemaPropertyAndModelTest() { OpenAPI openAPI = TestUtils.createOpenAPI(); diff --git a/modules/openapi-generator/src/test/resources/3_0/model-deprecated.yaml b/modules/openapi-generator/src/test/resources/3_0/model-deprecated.yaml new file mode 100644 index 00000000000..a3388a8d695 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/model-deprecated.yaml @@ -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