diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java index 448c08cd2c71..8b5bcb4218ba 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java @@ -105,6 +105,7 @@ import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLCommentLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementLiteral; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLFilterStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLIndexedStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLMethodCallStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLNavigationAccess; @@ -1101,6 +1102,7 @@ public void visit(BLangXMLNavigationAccess xmlNavigation) { @Override public void visit(BLangExtendedXMLNavigationAccess extendedXMLNavigationAccess) { extendedXMLNavigationAccess.stepExpr = rewriteExpr(extendedXMLNavigationAccess.stepExpr); + rewriteExprs(extendedXMLNavigationAccess.extensions); result = extendedXMLNavigationAccess; } @@ -1115,6 +1117,11 @@ public void visit(BLangXMLMethodCallStepExtend xmlMethodCallStepExtend) { xmlMethodCallStepExtend.invocation = rewriteExpr(xmlMethodCallStepExtend.invocation); result = xmlMethodCallStepExtend; } + + @Override + public void visit(BLangXMLFilterStepExtend xmlFilterStepExtend) { + result = xmlFilterStepExtend; + } @Override public void visit(BLangIndexBasedAccess.BLangJSONAccessExpr jsonAccessExpr) { diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java index 64bc08bfd455..bc7ed56407b5 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java @@ -123,8 +123,6 @@ import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLCommentLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementLiteral; -import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLIndexedStepExtend; -import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLMethodCallStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLNavigationAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLProcInsLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLQName; @@ -1903,24 +1901,6 @@ public void visit(BLangIndexBasedAccess.BLangXMLAccessExpr xmlIndexAccessExpr) { result = xmlIndexAccessExpr; } - @Override - public void visit(BLangExtendedXMLNavigationAccess extendedXMLNavigationAccess) { - extendedXMLNavigationAccess.stepExpr = rewriteExpr(extendedXMLNavigationAccess.stepExpr); - result = extendedXMLNavigationAccess; - } - - @Override - public void visit(BLangXMLIndexedStepExtend xmlIndexedStepExtend) { - xmlIndexedStepExtend.indexExpr = rewriteExpr(xmlIndexedStepExtend.indexExpr); - result = xmlIndexedStepExtend; - } - - @Override - public void visit(BLangXMLMethodCallStepExtend xmlMethodCallStepExtend) { - xmlMethodCallStepExtend.invocation = rewriteExpr(xmlMethodCallStepExtend.invocation); - result = xmlMethodCallStepExtend; - } - @Override public void visit(BLangXMLElementAccess xmlElementAccess) { xmlElementAccess.expr = rewriteExpr(xmlElementAccess.expr); diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal b/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal index f25ca9c6d052..6f0e5aaa9488 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal @@ -561,27 +561,34 @@ function testXmlMethodCallStepExtend() returns error? { assert(x1/.children().filter(y => (y).getName() == "local"), xml `noyesno`); var xmlObj1 = object { - xml j; - xml k; - xml l; + xml j = x1/[0]; + xml k = x1/**/.map(y => y.elementChildren().get(0)); + xml l = x1/.; function init() { - self.j = x1/[0]; - self.k = x1/**/.map(y => y.elementChildren().get(0)); - self.l = x1/.; } - }; assert(xmlObj1.j, xml `T-shirtBackpackWatch`); assert(xmlObj1.k, xml `nikeadidassamsung`); assert(xmlObj1.l, xml `132`); - assert(x1/**/.get(1), xml `nikeadidassamsung`); assert(x1/**/.map(y => y), xml `noyesno`); assert(x1/**/.filter(y => (y).data() == "yes"), xml `yes`); assert(x1/**/<*>.children().filter(y => y is xml:Element), xml `nikenoadidasyessamsungno`); assert(x1/**/.children().filter(y => y is xml:Element && y.getName() == local), xml `noyesno`); assert(x1/**/.first().slice(0, 1), xml `T-shirtBackpackWatch`); + function () returns [xml, xml, xml] xmlFunc = function() returns [xml, xml, xml] { + xml jf = x1/**/.get(1); + xml kf = x1/**/.; + xml lf = x1/[0]; + return [jf, kf, lf]; + }; + + [xml, xml, xml] [funcResult1, funcResult2, funcResult3] = xmlFunc(); + assert(funcResult1, xml `nikeadidassamsung`); + assert(funcResult2, xml `nikenoadidasyessamsungno`); + assert(funcResult3, xml `132`); + xml:Element x2 = xml ` xml text 10 @@ -596,7 +603,7 @@ function testXmlMethodCallStepExtend() returns error? { assert(x2/*.filter(y => y is xml:Element), xml `10153044050nikeno`); assert(x2/*.map(y => y is xml:Text ? xml `` : y), - xml `10153044050nikeno`); + xml `10153044050nikeno`); assert(x2/*.filter(y => y is xml:Element), xml `10153044050nikeno`); assert(x2/*.children().strip(), xml `10153044050nikeno`); @@ -675,23 +682,23 @@ function testXmlMethodCallIndexedAndFilterStepExtend() { assert(x2/[0].children()., xml `10`); assert(x2/.map(y => y).children()., xml `4`); assert(x2/.filter(function(xml y) returns boolean { - int|error val = int:fromString((y).data()); - if val is int { - return val > 5; - } - return false; - })[0], + int|error val = int:fromString((y).data()); + if val is int { + return val > 5; + } + return false; + })[0], xml `40`); assert(x2/**/.get(1).children()[0], xml `15`); assert(x2/**/.map(y => y)[0], xml `10`); assert(x2/**/.children()..filter(function(xml y) returns boolean { - int|error val = int:fromString((y).data()); - if val is int { - return val > 5; - } - return false; - }), xml `30`); + int|error val = int:fromString((y).data()); + if val is int { + return val > 5; + } + return false; + }), xml `30`); xml:Comment x3 = xml ``; assert(x3/*.map(y => y)[0]., xml ``);