From b12664928b60940fa46f833402378dd9b87164ba Mon Sep 17 00:00:00 2001 From: Thiago Arrais Date: Wed, 5 Aug 2026 11:46:32 -0300 Subject: [PATCH] fix(go): unambiguate case-sensitive property names --- .../codegen/languages/AbstractGoCodegen.java | 10 ++++++ .../openapitools/codegen/go/GoModelTest.java | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 19f34eaf9786..7da306062df6 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -755,6 +755,16 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert || (property.isAnyType && !property.isModel)) { property.vendorExtensions.put("x-golang-is-container", true); } + for(CodegenProperty cp: model.allVars) { + if (cp.baseName.equals(property.baseName)) { + return; + } + if (cp.name.equals(property.name)) { + property.name = "P_" + property.baseName; + property.setHasSanitizedName(true); + return; + } + } } @Override diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoModelTest.java index e0829f2e0a6f..e941289965c4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoModelTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoModelTest.java @@ -276,6 +276,38 @@ public void filePropertyTest() { Assert.assertEquals(codegen.getTypeDeclaration(model3), "File"); } + @Test(description = "convert a model with case-sensitive properties") + public void caseSensitivePropsTest() { + final Schema model = new Schema() + .description("a sample model") + .addProperty("name", new StringSchema()) + .addProperty("Name", new StringSchema()) + .addProperty("FirstName", new StringSchema()) + .addProperty("first_name", new StringSchema()); + final DefaultCodegen codegen = new GoClientCodegen(); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + codegen.setOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel("sample", model); + + Assert.assertEquals(cm.vars.size(), 4); + + final CodegenProperty property1 = cm.vars.get(0); + Assert.assertEquals(property1.baseName, "name"); + Assert.assertEquals(property1.name, "Name"); + + final CodegenProperty property2 = cm.vars.get(1); + Assert.assertEquals(property2.baseName, "Name"); + Assert.assertEquals(property2.name, "P_Name"); + + final CodegenProperty property3 = cm.vars.get(2); + Assert.assertEquals(property3.baseName, "FirstName"); + Assert.assertEquals(property3.name, "FirstName"); + + final CodegenProperty property4 = cm.vars.get(3); + Assert.assertEquals(property4.baseName, "first_name"); + Assert.assertEquals(property4.name, "P_first_name"); + } + @DataProvider(name = "modelNames") public static Object[][] primeNumbers() { return new Object[][]{