From f727f7189a02ec1ada3faa486396fef162f2fd54 Mon Sep 17 00:00:00 2001 From: hindujaB Date: Fri, 3 Nov 2023 15:58:13 +0530 Subject: [PATCH 1/2] Fix wrong record value generation --- .../ballerinalang/compiler/bir/codegen/JvmDesugarPhase.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/JvmDesugarPhase.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/JvmDesugarPhase.java index 58de262b3ae5..4a41ce0ce741 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/JvmDesugarPhase.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/JvmDesugarPhase.java @@ -34,6 +34,7 @@ import org.wso2.ballerinalang.compiler.semantics.model.symbols.BInvokableTypeSymbol; import org.wso2.ballerinalang.compiler.semantics.model.symbols.BObjectTypeSymbol; import org.wso2.ballerinalang.compiler.semantics.model.symbols.BVarSymbol; +import org.wso2.ballerinalang.compiler.semantics.model.symbols.Symbols; import org.wso2.ballerinalang.compiler.semantics.model.types.BField; import org.wso2.ballerinalang.compiler.semantics.model.types.BInvokableType; import org.wso2.ballerinalang.compiler.semantics.model.types.BObjectType; @@ -42,6 +43,7 @@ import org.wso2.ballerinalang.compiler.util.Name; import org.wso2.ballerinalang.compiler.util.Names; import org.wso2.ballerinalang.compiler.util.TypeTags; +import org.wso2.ballerinalang.util.Flags; import org.wso2.ballerinalang.util.Lists; import java.util.ArrayList; @@ -190,6 +192,9 @@ private static void encodePackageIdentifiers(PackageID packageID, HashMap typeDefs, HashMap encodedVsInitialIds) { for (BIRTypeDefinition typeDefinition : typeDefs) { + if (Symbols.isFlagOn(typeDefinition.type.flags, Flags.ANONYMOUS)) { + typeDefinition.name = Names.fromString(Utils.unescapeBallerina(typeDefinition.name.value)); + } typeDefinition.type.tsymbol.name = Names.fromString(encodeNonFunctionIdentifier( typeDefinition.type.tsymbol.name.value, encodedVsInitialIds)); typeDefinition.internalName = From 4951240bfc6c4a17fd9e4a6242fd0b11eb2df2ed Mon Sep 17 00:00:00 2001 From: hindujaB Date: Fri, 3 Nov 2023 16:11:49 +0530 Subject: [PATCH 2/2] Add test case with records --- .../langlib/test/LangLibValueTest.java | 2 +- .../test/resources/test-src/valuelib_test.bal | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/langlib/langlib-test/src/test/java/org/ballerinalang/langlib/test/LangLibValueTest.java b/langlib/langlib-test/src/test/java/org/ballerinalang/langlib/test/LangLibValueTest.java index d44f848941ac..cec4adb5d0bd 100644 --- a/langlib/langlib-test/src/test/java/org/ballerinalang/langlib/test/LangLibValueTest.java +++ b/langlib/langlib-test/src/test/java/org/ballerinalang/langlib/test/LangLibValueTest.java @@ -379,7 +379,7 @@ public Object[] cloneWithTypeFunctions() { "testConvertToUnionWithAmbiguousMemberTypes", "testConvertingToReferenceTypes", "testCloneWithTypeTableToAnydata", "testUnionNestedTypeConversionErrors", "testCloneWithTypeToUnionOfTypeReference", "testCloneWithTypeToTableNegative", - "testCloneWithTypeToRecordWithIntersectingUnionMembers" + "testCloneWithTypeToRecordWithIntersectingUnionMembers", "testCloneWithTypeToRecordWithSpecialChars" }; } diff --git a/langlib/langlib-test/src/test/resources/test-src/valuelib_test.bal b/langlib/langlib-test/src/test/resources/test-src/valuelib_test.bal index 39a948bb46cd..2d9abf5be316 100644 --- a/langlib/langlib-test/src/test/resources/test-src/valuelib_test.bal +++ b/langlib/langlib-test/src/test/resources/test-src/valuelib_test.bal @@ -4646,6 +4646,40 @@ function testLast() { assertTrue([] == value:last(ar1, ar)); } + +public type Copybook record { + DFHCOMMAREA DFHCOMMAREA?; +}; + +public type DFHCOMMAREA record { + record { + string MI\-HDR\-VERSION?; + string MI\-HDR\-MSGID?; + string MI\-HDR\-LOGGINGID?; + record { + string MI\-HDR\-REPLYQMGR?; + }[2] MI\-HDR\-REPLYSTACK?; + } BROKER\-MESSAGE\-AREA?; +}; + +function testCloneWithTypeToRecordWithSpecialChars() { + string s = string `{ + "DFHCOMMAREA": { + "BROKER-MESSAGE-AREA": { + "MI-HDR-VERSION": "2", + "MI-HDR-MSGID":"3238763233323598798798712321187612", + "MI-HDR-LOGGINGID": "Z5118761-Z" + } + } + }`; + json rec = checkpanic value:fromJsonString(s); + map mapJson = checkpanic rec.ensureType(); + Copybook|error dfhcommarea = mapJson.cloneWithType(); + assertTrue(dfhcommarea is Copybook); + Copybook cb = checkpanic dfhcommarea.ensureType(); + assertEquality(cb.DFHCOMMAREA?.BROKER\-MESSAGE\-AREA.toString(), string `{"MI-HDR-VERSION":"2","MI-HDR-MSGID":"3238763233323598798798712321187612","MI-HDR-LOGGINGID":"Z5118761-Z"}`); +} + type AssertionError distinct error; const ASSERTION_ERROR_REASON = "AssertionError";