From 92aa882df696780116e281ce4f2bb2469c887e9e Mon Sep 17 00:00:00 2001 From: cb-alish Date: Wed, 4 Feb 2026 15:32:27 +0530 Subject: [PATCH] Dotnet: Fixed an issue where an attribute namespace was treated as local instead of global. --- .../java/com/chargebee/sdk/dotnet/Dotnet.java | 13 +++++++++++- .../com/chargebee/sdk/java/v4/JavaV4.java | 1 - .../builder/GetRequestParamsBuilderTest.java | 21 ++++++++++++------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/chargebee/sdk/dotnet/Dotnet.java b/src/main/java/com/chargebee/sdk/dotnet/Dotnet.java index 19a8d9b..78e6b11 100644 --- a/src/main/java/com/chargebee/sdk/dotnet/Dotnet.java +++ b/src/main/java/com/chargebee/sdk/dotnet/Dotnet.java @@ -902,7 +902,12 @@ public String getFullNameDotnet(Attribute attribute) { + Inflector.capitalize(toClazName((attribute.name))))) + "Enum"; } - return Inflector.capitalize(toClazName(activeResource.name)) + String prefix = Inflector.capitalize(toClazName(activeResource.name)); + if (isSubResourcesNameSpaceGlobal(activeResource, attribute.metaModelName())) { + prefix = ""; + } + ; + return prefix + Inflector.capitalize( toClazName( Inflector.singularize(attribute.metaModelName()) @@ -919,6 +924,12 @@ public String getFullNameDotnet(Attribute attribute) { return Inflector.capitalize(toClazName(attribute.name)) + "Enum"; } + private boolean isSubResourcesNameSpaceGlobal( + Resource activeResource, String subResourceAttributeName) { + return activeResource.attributes().stream() + .anyMatch(a -> a.name.equals(subResourceAttributeName) && a.isDependentAttribute()); + } + public String parameterPrimitiveDataType(Attribute attribute) { if (attribute.isEnumAttribute()) { if (attribute.isListOfEnum()) { diff --git a/src/main/java/com/chargebee/sdk/java/v4/JavaV4.java b/src/main/java/com/chargebee/sdk/java/v4/JavaV4.java index b9e9e6d..d6bd938 100644 --- a/src/main/java/com/chargebee/sdk/java/v4/JavaV4.java +++ b/src/main/java/com/chargebee/sdk/java/v4/JavaV4.java @@ -4,7 +4,6 @@ import com.chargebee.sdk.FileOp; import com.chargebee.sdk.Language; import com.chargebee.sdk.java.v4.builder.*; - import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/com/chargebee/sdk/java/v4/builder/GetRequestParamsBuilderTest.java b/src/test/java/com/chargebee/sdk/java/v4/builder/GetRequestParamsBuilderTest.java index f2048fc..b7c3437 100644 --- a/src/test/java/com/chargebee/sdk/java/v4/builder/GetRequestParamsBuilderTest.java +++ b/src/test/java/com/chargebee/sdk/java/v4/builder/GetRequestParamsBuilderTest.java @@ -1620,13 +1620,15 @@ void shouldGenerateCustomFieldMethodWhenSupported() throws IOException { FileOp.WriteString writeOp = findWriteOp(fileOps, "CustomerListParams.java"); assertThat(writeOp.fileContent) - .contains("public CustomFieldSelector customField(String fieldName)"); + .contains( + "public CustomFieldSelector customField(String fieldName)"); assertThat(writeOp.fileContent) .contains("return new CustomFieldSelector<>(fieldName, this, queryParams)"); } @Test - @DisplayName("Should not generate customField method when x-cb-is-custom-fields-supported is false") + @DisplayName( + "Should not generate customField method when x-cb-is-custom-fields-supported is false") void shouldNotGenerateCustomFieldMethodWhenNotSupported() throws IOException { Operation getOperation = createGetOperation("customer", "list"); getOperation.getExtensions().put(Extension.IS_CUSTOM_FIELDS_SUPPORTED, false); @@ -1674,8 +1676,7 @@ void shouldImportCustomFieldSelectorWhenSupported() throws IOException { FileOp.WriteString writeOp = findWriteOp(fileOps, "SubscriptionListParams.java"); assertThat(writeOp.fileContent) .contains("import com.chargebee.v4.filters.CustomFieldSelector;"); - assertThat(writeOp.fileContent) - .contains("import com.chargebee.v4.filters.BooleanFilter;"); + assertThat(writeOp.fileContent).contains("import com.chargebee.v4.filters.BooleanFilter;"); } @Test @@ -1697,11 +1698,13 @@ void shouldGenerateCorrectBuilderTypeForDifferentOperations() throws IOException FileOp.WriteString customerWriteOp = findWriteOp(fileOps, "CustomerListParams.java"); assertThat(customerWriteOp.fileContent) - .contains("public CustomFieldSelector customField(String fieldName)"); + .contains( + "public CustomFieldSelector customField(String fieldName)"); FileOp.WriteString subscriptionWriteOp = findWriteOp(fileOps, "SubscriptionListParams.java"); assertThat(subscriptionWriteOp.fileContent) - .contains("public CustomFieldSelector customField(String fieldName)"); + .contains( + "public CustomFieldSelector customField(String fieldName)"); } @Test @@ -1719,7 +1722,8 @@ void shouldGenerateCustomFieldMethodWithJavadoc() throws IOException { FileOp.WriteString writeOp = findWriteOp(fileOps, "CustomerListParams.java"); assertThat(writeOp.fileContent).contains("Create a filter for a custom field"); assertThat(writeOp.fileContent).contains("@param fieldName the custom field name"); - assertThat(writeOp.fileContent).contains("@return CustomFieldSelector for choosing filter type"); + assertThat(writeOp.fileContent) + .contains("@return CustomFieldSelector for choosing filter type"); } @Test @@ -1742,7 +1746,8 @@ void shouldHandleCustomFieldSupportWithOtherFeatures() throws IOException { FileOp.WriteString writeOp = findWriteOp(fileOps, "CustomerListParams.java"); // Verify customField method is generated assertThat(writeOp.fileContent) - .contains("public CustomFieldSelector customField(String fieldName)"); + .contains( + "public CustomFieldSelector customField(String fieldName)"); // Verify other features are still generated assertThat(writeOp.fileContent).contains("public FirstNameFilter firstName()"); assertThat(writeOp.fileContent).contains("public CreatedAtFilter createdAt()");