From e56c689d88738b6d9e3a1eb8ccb87b7d87b50976 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Mon, 27 Jan 2025 16:30:03 +0530 Subject: [PATCH 1/8] Desugar field access expression to if statement expression --- .../compiler/desugar/Desugar.java | 101 +++++++++++++++++- 1 file changed, 97 insertions(+), 4 deletions(-) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java index c9d5138c9d36..282d23378e5a 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java @@ -6335,12 +6335,13 @@ public void visit(BLangSimpleVarRef varRefExpr) { @Override public void visit(BLangFieldBasedAccess.BLangNSPrefixedFieldBasedAccess nsPrefixedFieldBasedAccess) { - rewriteFieldBasedAccess(nsPrefixedFieldBasedAccess); + rewriteFieldBasedAccess(nsPrefixedFieldBasedAccess, true); } - private void rewriteFieldBasedAccess(BLangFieldBasedAccess fieldAccessExpr) { + private void rewriteFieldBasedAccess(BLangFieldBasedAccess fieldAccessExpr, boolean prefixedFieldBased) { if (safeNavigate(fieldAccessExpr)) { - result = rewriteExpr(rewriteSafeNavigationExpr(fieldAccessExpr)); + result = prefixedFieldBased? rewriteExpr(rewriteSafeNavigationExpr(fieldAccessExpr)) : + rewriteExpr(rewriteSafeFieldBasedAccessExpr(fieldAccessExpr)); return; } @@ -6434,7 +6435,7 @@ private void rewriteFieldBasedAccess(BLangFieldBasedAccess fieldAccessExpr) { @Override public void visit(BLangFieldBasedAccess fieldAccessExpr) { - rewriteFieldBasedAccess(fieldAccessExpr); + rewriteFieldBasedAccess(fieldAccessExpr, false); } private BLangNode rewriteObjectMemberAccessAsField(BLangFieldBasedAccess fieldAccessExpr) { @@ -10056,6 +10057,98 @@ private boolean safeNavigate(BLangAccessExpression accessExpr) { return false; } + private BLangExpression rewriteSafeFieldBasedAccessExpr(BLangAccessExpression accessExpr) { + /* + * Following is the structure of the safe navigation desugar. + * Before : + * type A { + * B b; + * } + * type B { + * int c; + * } + * int? res = a?.b?.c + * + * After desugar : + * any|error temp_result; + * temp_result = a; + * if temp_result !is error? { + * temp_result = ( temp_result).b; + * if temp_result !is error? { + * temp_result = ( temp_result).c; + * } + * } + * int? res = temp_result; + */ + Location pos = accessExpr.pos; + // Create block statement to hold desugared statements. + BLangBlockStmt blockStmt = ASTBuilderUtil.createBlockStmt(pos); + + // Create a temp variable to hold the intermediate result of the access expression. + String matchTempResultVarName = GEN_VAR_PREFIX.value + "temp_result"; + BLangSimpleVariableDef tempResultVarDef = createVarDef(matchTempResultVarName, symTable.anyOrErrorType, + null, pos); + blockStmt.addStatement(tempResultVarDef); + BLangSimpleVarRef tempResultVarRef = ASTBuilderUtil.createVariableRef(pos, tempResultVarDef.var.symbol); + + createNestedIfForAccessExpression(blockStmt, accessExpr, tempResultVarRef, pos); + + BLangStatementExpression stmtExpr = createStatementExpression(blockStmt, + types.addConversionExprIfRequired(tempResultVarRef, accessExpr.getBType())); + stmtExpr.setBType(accessExpr.getBType()); + return stmtExpr; + } + + private BLangIf createNestedIfForAccessExpression(BLangBlockStmt blockStmt, BLangAccessExpression accessExpr, + BLangSimpleVarRef tempResultVarRef, Location pos) { + NodeKind kind = accessExpr.expr.getKind(); + if (kind == NodeKind.FIELD_BASED_ACCESS_EXPR) { + BLangIf ifStmt = createNestedIfForAccessExpression(blockStmt, (BLangAccessExpression) accessExpr.expr, + tempResultVarRef, pos); + blockStmt = ifStmt.body; + } else { + // this else block only reach one time in the recursive execution + // this will assign the initial value for the `tempResultVarRef` eg: `temp_result = a;` in the sample + blockStmt.addStatement(ASTBuilderUtil.createAssignmentStmt(pos, tempResultVarRef, accessExpr.expr)); + } + + // Condition + BLangType testTypeNode = null; + if (accessExpr.errorSafeNavigation && accessExpr.nilSafeNavigation) { + testTypeNode = getErrorOrNillTypeNode(); + } else if (accessExpr.errorSafeNavigation) { + testTypeNode = getErrorTypeNode(); + } else if (accessExpr.nilSafeNavigation) { + testTypeNode = getNillTypeNode(); + } + + BLangExpression conditionExpr; + if (testTypeNode == null) { + conditionExpr = getBooleanLiteral(true); + } else { + BLangTypeTestExpr isNilOrErrorTest = createTypeCheckExpr(pos, tempResultVarRef, testTypeNode); + isNilOrErrorTest.isNegation = true; + isNilOrErrorTest.setBType(symTable.booleanType); + conditionExpr = isNilOrErrorTest; + } + + // If body + BLangAccessExpression tempAccessExpr = nodeCloner.cloneNode(accessExpr); + BType type = types.getSafeType(accessExpr.expr.getBType(), true, true); + tempAccessExpr.expr = types.addConversionExprIfRequired(tempResultVarRef, type); + tempAccessExpr.errorSafeNavigation = false; + tempAccessExpr.nilSafeNavigation = false; + BLangAssignment assignmentStmt = + ASTBuilderUtil.createAssignmentStmt(symTable.builtinPos, tempResultVarRef, tempAccessExpr); + BLangBlockStmt ifBody = ASTBuilderUtil.createBlockStmt(symTable.builtinPos); + ifBody.addStatement(assignmentStmt); + + BLangIf ifStmt = ASTBuilderUtil.createIfStmt(pos, blockStmt); + ifStmt.setCondition(conditionExpr); + ifStmt.body = ifBody; + return ifStmt; + } + private BLangExpression rewriteSafeNavigationExpr(BLangAccessExpression accessExpr) { BType originalExprType = accessExpr.getBType(); // Create a temp variable to hold the intermediate result of the acces expression. From 26e466dd5827bb4d9986d5324ca083e7939d01b7 Mon Sep 17 00:00:00 2001 From: chiranSachintha Date: Tue, 28 Jan 2025 15:31:20 +0530 Subject: [PATCH 2/8] Add full build pipeline for PR build --- .github/workflows/pull_request_full_build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pull_request_full_build.yml b/.github/workflows/pull_request_full_build.yml index 2679e53676c4..e2ad8861a457 100644 --- a/.github/workflows/pull_request_full_build.yml +++ b/.github/workflows/pull_request_full_build.yml @@ -4,6 +4,8 @@ on: pull_request: branches: - master + - 2201.[0-9]+.x + - 2201.[0-9]+.[0-9]+-stage jobs: build-lang: From 748ea3ecbc8c5ff9ea04fb509e7f47154bff7783 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Tue, 28 Jan 2025 15:45:52 +0530 Subject: [PATCH 3/8] Add tests --- .../expressions/access/FieldAccessTest.java | 5 +++++ .../expressions/access/field_access.bal | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/expressions/access/FieldAccessTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/expressions/access/FieldAccessTest.java index 1c719f4eb2aa..c73f5c9f0d1c 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/expressions/access/FieldAccessTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/expressions/access/FieldAccessTest.java @@ -310,6 +310,11 @@ public void testValidXMLmapFieldAccess() { BRunUtil.invoke(result, "testValidXMLmapFieldAccess"); } + @Test + public void testLargeChainingFieldAccess() { + BRunUtil.invoke(result, "testLargeChainingFieldAccess"); + } + @Test(dataProvider = "fieldAccessOnJsonTypedRecordFields") public void testFieldAccessOnJsonTypedRecordFields(String function) { BRunUtil.invoke(result, function); diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal b/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal index 515be89f868a..d817a6f7bb4e 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal @@ -544,6 +544,25 @@ function testValidXMLmapFieldAccess() { assertEquals(y, null); } +function testLargeChainingFieldAccess() { + // This test is to check the performance of the field access chaining and possible OOM and large method errors + json a = { "a": "b" }; + any|error b = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error c = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error d = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error e = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error f = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error g = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error h = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error i = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error j = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + any|error k = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + assertEquals(b, ()); + assertEquals(c, ()); + assertEquals(d, ()); + assertEquals(e, ()); +} + isolated function isEqual(anydata|error val1, anydata|error val2) returns boolean { if (val1 is anydata && val2 is anydata) { return (val1 == val2); From 97d5ca20f5992f210bc813a6ce376479a5e9fee4 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Tue, 28 Jan 2025 16:45:54 +0530 Subject: [PATCH 4/8] Update test case --- .../expressions/access/field_access.bal | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal b/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal index d817a6f7bb4e..8287e51f51be 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/expressions/access/field_access.bal @@ -547,20 +547,12 @@ function testValidXMLmapFieldAccess() { function testLargeChainingFieldAccess() { // This test is to check the performance of the field access chaining and possible OOM and large method errors json a = { "a": "b" }; - any|error b = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error c = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error d = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error e = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error f = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error g = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error h = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error i = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error j = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - any|error k = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; - assertEquals(b, ()); - assertEquals(c, ()); - assertEquals(d, ()); - assertEquals(e, ()); + anydata|error b = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + anydata|error c = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + anydata|error d = a?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b?.b; + assertTrue(b is ()); + assertTrue(c is ()); + assertTrue(d is ()); } isolated function isEqual(anydata|error val1, anydata|error val2) returns boolean { From 9cf77d2a04ff9c7e341a2e60ab267b930f3f1739 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Tue, 28 Jan 2025 16:59:05 +0530 Subject: [PATCH 5/8] Update full build pipeline --- .github/workflows/pull_request_full_build.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pull_request_full_build.yml b/.github/workflows/pull_request_full_build.yml index e2ad8861a457..4513b9b4ccc1 100644 --- a/.github/workflows/pull_request_full_build.yml +++ b/.github/workflows/pull_request_full_build.yml @@ -45,6 +45,7 @@ jobs: with: name: Ballerina Lang Artifacts path: ~/.m2/ + include-hidden-files: true outputs: lang_version: ${{ steps.lang-version.outputs.version }} @@ -93,11 +94,11 @@ jobs: do git clone https://github.com/ballerina-platform/${module_name}.git; \ done -# - name: Checkout non-default branch -# run: | -# for module_name in $(jq -r '.standard_library| .[] | select(.level==${{ matrix.level }}) | .name' extensions.json); do \ -# cd $module_name && git fetch origin && git checkout -t origin/java_17_migration && cd ..; \ -# done + - name: Checkout non-default branch + run: | + for module_name in $(jq -r '.standard_library| .[] | select(.level==${{ matrix.level }}) | .name' extensions.json); do \ + cd $module_name && git fetch origin && git checkout -t origin/2201.10.x || : && cd ..; \ + done - name: Update Lang Version in Module run: | From 5311dccce8e1f6bb7a2310c1ab7893bae7a13635 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Wed, 29 Jan 2025 10:04:43 +0530 Subject: [PATCH 6/8] Fix checkstyle --- .../java/org/wso2/ballerinalang/compiler/desugar/Desugar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java index 282d23378e5a..fe81bb4d24a2 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java @@ -6340,7 +6340,7 @@ public void visit(BLangFieldBasedAccess.BLangNSPrefixedFieldBasedAccess nsPrefix private void rewriteFieldBasedAccess(BLangFieldBasedAccess fieldAccessExpr, boolean prefixedFieldBased) { if (safeNavigate(fieldAccessExpr)) { - result = prefixedFieldBased? rewriteExpr(rewriteSafeNavigationExpr(fieldAccessExpr)) : + result = prefixedFieldBased ? rewriteExpr(rewriteSafeNavigationExpr(fieldAccessExpr)) : rewriteExpr(rewriteSafeFieldBasedAccessExpr(fieldAccessExpr)); return; } From 8acff418cebee69d38954d49bd81003cfc7b571a Mon Sep 17 00:00:00 2001 From: rdulmina Date: Wed, 29 Jan 2025 10:34:07 +0530 Subject: [PATCH 7/8] Undo changes to full build pipeline --- .github/workflows/pull_request_full_build.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pull_request_full_build.yml b/.github/workflows/pull_request_full_build.yml index 4513b9b4ccc1..2679e53676c4 100644 --- a/.github/workflows/pull_request_full_build.yml +++ b/.github/workflows/pull_request_full_build.yml @@ -4,8 +4,6 @@ on: pull_request: branches: - master - - 2201.[0-9]+.x - - 2201.[0-9]+.[0-9]+-stage jobs: build-lang: @@ -45,7 +43,6 @@ jobs: with: name: Ballerina Lang Artifacts path: ~/.m2/ - include-hidden-files: true outputs: lang_version: ${{ steps.lang-version.outputs.version }} @@ -94,11 +91,11 @@ jobs: do git clone https://github.com/ballerina-platform/${module_name}.git; \ done - - name: Checkout non-default branch - run: | - for module_name in $(jq -r '.standard_library| .[] | select(.level==${{ matrix.level }}) | .name' extensions.json); do \ - cd $module_name && git fetch origin && git checkout -t origin/2201.10.x || : && cd ..; \ - done +# - name: Checkout non-default branch +# run: | +# for module_name in $(jq -r '.standard_library| .[] | select(.level==${{ matrix.level }}) | .name' extensions.json); do \ +# cd $module_name && git fetch origin && git checkout -t origin/java_17_migration && cd ..; \ +# done - name: Update Lang Version in Module run: | From 6743133cac98bea4f8563cba96bbf9400a44fc18 Mon Sep 17 00:00:00 2001 From: rdulmina Date: Mon, 3 Feb 2025 15:05:25 +0530 Subject: [PATCH 8/8] Remove unwanted node cloning --- .../org/wso2/ballerinalang/compiler/desugar/Desugar.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java index fe81bb4d24a2..c7ac85ebe2a2 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java @@ -10133,13 +10133,12 @@ private BLangIf createNestedIfForAccessExpression(BLangBlockStmt blockStmt, BLan } // If body - BLangAccessExpression tempAccessExpr = nodeCloner.cloneNode(accessExpr); BType type = types.getSafeType(accessExpr.expr.getBType(), true, true); - tempAccessExpr.expr = types.addConversionExprIfRequired(tempResultVarRef, type); - tempAccessExpr.errorSafeNavigation = false; - tempAccessExpr.nilSafeNavigation = false; + accessExpr.expr = types.addConversionExprIfRequired(tempResultVarRef, type); + accessExpr.errorSafeNavigation = false; + accessExpr.nilSafeNavigation = false; BLangAssignment assignmentStmt = - ASTBuilderUtil.createAssignmentStmt(symTable.builtinPos, tempResultVarRef, tempAccessExpr); + ASTBuilderUtil.createAssignmentStmt(symTable.builtinPos, tempResultVarRef, accessExpr); BLangBlockStmt ifBody = ASTBuilderUtil.createBlockStmt(symTable.builtinPos); ifBody.addStatement(assignmentStmt);