From 8d63f75966f307063428e48b811b6c102bcb4845 Mon Sep 17 00:00:00 2001 From: k0ral Date: Sun, 26 Jul 2020 11:25:35 +0200 Subject: [PATCH] [Protobuf] Make it possible to override field index using x-protobuf-index (#7002) --- .../codegen/languages/ProtobufSchemaCodegen.java | 10 ++++++---- .../src/main/resources/protobuf-schema/api.mustache | 2 +- .../src/main/resources/protobuf-schema/model.mustache | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java index 6cefe264da5..07bd07ae425 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java @@ -28,7 +28,6 @@ import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.DocumentationFeature; import org.openapitools.codegen.meta.features.SecurityFeature; import org.openapitools.codegen.meta.features.WireFormatFeature; -import org.openapitools.codegen.utils.ProcessUtils; import org.openapitools.codegen.utils.ModelUtils; import org.apache.commons.lang3.StringUtils; @@ -216,13 +215,12 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf public Map postProcessModels(Map objs) { objs = postProcessModelsEnum(objs); List models = (List) objs.get("models"); - // add x-index to properties - ProcessUtils.addIndexToProperties(models, 1); for (Object _mo : models) { Map mo = (Map) _mo; CodegenModel cm = (CodegenModel) mo.get("model"); + int index = 1; for (CodegenProperty var : cm.vars) { // add x-protobuf-type: repeated if it's an array if (Boolean.TRUE.equals(var.isListContainer)) { @@ -247,6 +245,10 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf enumIndex++; } } + + // Add x-protobuf-index, unless already specified + var.vendorExtensions.putIfAbsent("x-protobuf-index", index); + index++; } } return objs; @@ -422,7 +424,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf } } - p.vendorExtensions.put("x-index", index); + p.vendorExtensions.putIfAbsent("x-protobuf-index", index); index++; } diff --git a/modules/openapi-generator/src/main/resources/protobuf-schema/api.mustache b/modules/openapi-generator/src/main/resources/protobuf-schema/api.mustache index 3236d010ccd..ccf06f93c6d 100644 --- a/modules/openapi-generator/src/main/resources/protobuf-schema/api.mustache +++ b/modules/openapi-generator/src/main/resources/protobuf-schema/api.mustache @@ -30,7 +30,7 @@ message {{operationId}}Request { {{#description}} // {{{.}}} {{/description}} - {{#vendorExtensions.x-protobuf-type}}{{.}} {{/vendorExtensions.x-protobuf-type}}{{vendorExtensions.x-protobuf-data-type}} {{paramName}} = {{vendorExtensions.x-index}}; + {{#vendorExtensions.x-protobuf-type}}{{.}} {{/vendorExtensions.x-protobuf-type}}{{vendorExtensions.x-protobuf-data-type}} {{paramName}} = {{vendorExtensions.x-protobuf-index}}; {{/allParams}} } diff --git a/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache b/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache index 5362485d3a5..069356b6803 100644 --- a/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache +++ b/modules/openapi-generator/src/main/resources/protobuf-schema/model.mustache @@ -18,7 +18,7 @@ message {{classname}} { // {{{.}}} {{/description}} {{^isEnum}} - {{#vendorExtensions.x-protobuf-type}}{{.}} {{/vendorExtensions.x-protobuf-type}}{{vendorExtensions.x-protobuf-data-type}} {{name}} = {{vendorExtensions.x-index}}{{#vendorExtensions.x-protobuf-packed}} [packed=true]{{/vendorExtensions.x-protobuf-packed}}; + {{#vendorExtensions.x-protobuf-type}}{{.}} {{/vendorExtensions.x-protobuf-type}}{{vendorExtensions.x-protobuf-data-type}} {{name}} = {{vendorExtensions.x-protobuf-index}}{{#vendorExtensions.x-protobuf-packed}} [packed=true]{{/vendorExtensions.x-protobuf-packed}}; {{/isEnum}} {{#isEnum}} enum {{name}} {