From 57330fe57bd6c6298550b70512e809948098500e Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Mon, 23 Feb 2026 11:57:31 +0530 Subject: [PATCH 1/3] Escape special characters in field names --- .../core/utils/SourceCodeGenerator.java | 4 +- .../config/create_record_type4.json | 156 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/types_manager/create_and_update/config/create_record_type4.json diff --git a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java index 020e03197d..f67eb5b71c 100644 --- a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java +++ b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java @@ -36,6 +36,8 @@ import java.util.StringJoiner; import java.util.stream.Collectors; +import static io.ballerina.flowmodelgenerator.core.converters.utils.DataMappingModelConverterUtils.escapeIdentifier; + /** * Code snippet generator. * @@ -487,7 +489,7 @@ private String generateMember(Member member, boolean withDefaultValue) { String template = "%s %s%s"; // [= ] - String fieldName = CommonUtil.escapeReservedKeyword(member.name()); + String fieldName = escapeIdentifier(member.name()); if (member.optional()) { fieldName = fieldName + "?"; } diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/types_manager/create_and_update/config/create_record_type4.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/types_manager/create_and_update/config/create_record_type4.json new file mode 100644 index 0000000000..b33ff5ca76 --- /dev/null +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/types_manager/create_and_update/config/create_record_type4.json @@ -0,0 +1,156 @@ +{ + "filePath": "test_pack1/types.bal", + "description": "Create a new record type", + "type": { + "name": "MyType", + "editable": true, + "metadata": { + "label": "MyType", + "description": "" + }, + "codedata": { + "node": "RECORD" + }, + "properties": { + "name": { + "metadata": { + "label": "Type name", + "description": "Unique name to identify the type" + }, + "types": [ + { + "fieldType": "IDENTIFIER", + "selected": true + } + ], + "value": "MyType", + "optional": false, + "editable": false, + "advanced": false, + "hidden": false + }, + "isPublic": { + "metadata": { + "label": "public", + "description": "Make visible across the workspace" + }, + "types": [ + { + "fieldType": "FLAG", + "selected": true + } + ], + "value": true, + "optional": true, + "editable": true, + "advanced": false, + "hidden": false + }, + "description": { + "metadata": { + "label": "Type description", + "description": "Detailed description about the type" + }, + "types": [ + { + "fieldType": "TEXT", + "selected": true + } + ], + "value": "", + "optional": true, + "editable": false, + "advanced": false, + "hidden": false + }, + "isArray": { + "metadata": { + "label": "Is array type", + "description": "Is this type an array or list value" + }, + "types": [ + { + "fieldType": "FLAG", + "selected": true + } + ], + "value": "false", + "optional": true, + "editable": false, + "advanced": false, + "hidden": false + }, + "arraySize": { + "metadata": { + "label": "Size of the array", + "description": "Array dimensions" + }, + "types": [ + { + "fieldType": "TEXT", + "selected": true + } + ], + "value": "", + "optional": true, + "editable": true, + "advanced": true, + "hidden": false + } + }, + "members": [ + { + "kind": "FIELD", + "refs": [], + "type": "int", + "typeName": "int", + "name": "total_count", + "optional": false, + "readonly": false, + "isGraphqlId": false, + "selected": false + }, + { + "kind": "FIELD", + "refs": [], + "type": "int", + "typeName": "int", + "name": "+1", + "optional": false, + "readonly": false, + "isGraphqlId": false, + "selected": false + }, + { + "kind": "FIELD", + "refs": [], + "type": "int", + "typeName": "int", + "name": "-1", + "optional": false, + "readonly": false, + "isGraphqlId": false, + "selected": false + } + ], + "includes": [], + "allowAdditionalFields": false + }, + "output": { + "test_pack1/types.bal": [ + { + "range": { + "start": { + "line": 37, + "character": 0 + }, + "end": { + "line": 37, + "character": 0 + } + }, + "newText": "\npublic type MyType record {|\n\tint total_count;\n\tint \\+1;\n\tint \\-1;\n|};" + } + ] + } +} From 6b7768ed6dddcacf50d094379b2e8ae5440c3bd0 Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Mon, 23 Feb 2026 13:45:58 +0530 Subject: [PATCH 2/3] Address PR sugegstion --- .../core/utils/SourceCodeGenerator.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java index f67eb5b71c..1612f92329 100644 --- a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java +++ b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java @@ -489,7 +489,13 @@ private String generateMember(Member member, boolean withDefaultValue) { String template = "%s %s%s"; // [= ] - String fieldName = escapeIdentifier(member.name()); + String rawName = member.name(); + String fieldName; + if (rawName != null && (rawName.startsWith("'") || rawName.startsWith("\\"))) { + fieldName = rawName; + } else { + fieldName = escapeIdentifier(rawName); + } if (member.optional()) { fieldName = fieldName + "?"; } From 1bec5aec6d4a22153135bc0465847cb775fd7e42 Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Mon, 23 Feb 2026 14:01:46 +0530 Subject: [PATCH 3/3] Address spotBug failure --- .../flowmodelgenerator/core/utils/SourceCodeGenerator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java index 1612f92329..aff9246721 100644 --- a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java +++ b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/utils/SourceCodeGenerator.java @@ -494,6 +494,7 @@ private String generateMember(Member member, boolean withDefaultValue) { if (rawName != null && (rawName.startsWith("'") || rawName.startsWith("\\"))) { fieldName = rawName; } else { + assert rawName != null; fieldName = escapeIdentifier(rawName); } if (member.optional()) {