diff --git a/mule-migration-tool-e2e-tests/src/test/java/com/mulesoft/tools/migration/e2e/TransformMigrationTestCase.java b/mule-migration-tool-e2e-tests/src/test/java/com/mulesoft/tools/migration/e2e/TransformMigrationTestCase.java index a8173cb9d..3ce12ed8d 100644 --- a/mule-migration-tool-e2e-tests/src/test/java/com/mulesoft/tools/migration/e2e/TransformMigrationTestCase.java +++ b/mule-migration-tool-e2e-tests/src/test/java/com/mulesoft/tools/migration/e2e/TransformMigrationTestCase.java @@ -17,7 +17,8 @@ public class TransformMigrationTestCase extends AbstractEndToEndTestCase { @Parameters(name = "{0}") public static Object[] params() { return new Object[] { - "ee_transform/ee_transform_01" + "ee_transform/ee_transform_01", + "ee_transform/ee_transform_keep_parentheses" }; } diff --git a/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/input/src/main/app/mule-config.xml b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/input/src/main/app/mule-config.xml new file mode 100644 index 000000000..3b0b4af6f --- /dev/null +++ b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/input/src/main/app/mule-config.xml @@ -0,0 +1,30 @@ + + + + + + + + { + (flowVars.var1.groupData filter ($.name == data01.data and $.value == data01.value) map ((data02, indexOfPayload02) -> { + data: data02.name + })) + }) filter ($ != {}) + } + } + ]]> + + + + + diff --git a/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/pom.xml b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/pom.xml new file mode 100644 index 000000000..384545486 --- /dev/null +++ b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + org.mule.migrated + ee_transform_keep_parentheses + 1.0.0-M4-SNAPSHOT + mule-application + Application migrated with MMA + + + com.mulesoft.mule.modules + mule-compatibility-module + 1.4.0 + mule-plugin + + + + + mulesoft-releases + MuleSoft Releases Repository + https://repository.mulesoft.org/releases/ + + + anypoint-exchange + Anypoint Exchange + https://maven.anypoint.mulesoft.com/api/v1/maven + + + + + + true + + mulesoft-releases + MuleSoft Releases Repository + https://repository.mulesoft.org/releases/ + + + + + + org.mule.tools.maven + mule-maven-plugin + 3.2.1 + true + + + + + diff --git a/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/report/report.json b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/report/report.json new file mode 100644 index 000000000..1707610c2 --- /dev/null +++ b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/report/report.json @@ -0,0 +1,38 @@ +{ + "projectType": "MULE_THREE_APPLICATION", + "projectName": "input", + "connectorsMigrated": [], + "numberOfMuleComponents": 5, + "numberOfMuleComponentsMigrated": 5, + "componentDetails": { + "mule": { + "success": 1, + "failure": 0 + }, + "logger": { + "success": 1, + "failure": 0 + }, + "flow": { + "success": 1, + "failure": 0 + }, + "set-variable": { + "success": 1, + "failure": 0 + }, + "ee:transform": { + "success": 1, + "failure": 0 + } + }, + "numberOfMELExpressions": 0, + "numberOfMELExpressionsMigrated": 0, + "numberOfMELExpressionLines": 0, + "numberOfMELExpressionLinesMigrated": 0, + "numberOfDWTransformations": 1, + "numberOfDWTransformationsMigrated": 1, + "numberOfDWTransformationLines": 12, + "numberOfDWTransformationLinesMigrated": 12, + "detailedMessages": [] +} diff --git a/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/src/main/mule/mule-config.xml b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/src/main/mule/mule-config.xml new file mode 100644 index 000000000..c87a8c6ef --- /dev/null +++ b/mule-migration-tool-e2e-tests/src/test/resources/e2e/ee_transform/ee_transform_keep_parentheses/output/src/main/mule/mule-config.xml @@ -0,0 +1,28 @@ + + + + + + + + + { + (vars.var1.groupData filter ($.name == data01.data and $.value == data01.value) map ((data02, indexOfPayload02) -> { + data: data02.name + })) + }) filter (not $ == {}) + } +}]]> + + + + + + + + diff --git a/mule-migration-tool-e2e-tests/src/test/resources/e2e/soapkit/output/src/main/mule/mule-config.xml b/mule-migration-tool-e2e-tests/src/test/resources/e2e/soapkit/output/src/main/mule/mule-config.xml index 78f11c840..567623a2a 100644 --- a/mule-migration-tool-e2e-tests/src/test/resources/e2e/soapkit/output/src/main/mule/mule-config.xml +++ b/mule-migration-tool-e2e-tests/src/test/resources/e2e/soapkit/output/src/main/mule/mule-config.xml @@ -64,8 +64,8 @@ output application/java %dw 2.0 -output application/xml ns ns0 http://mulesoft.org/tshirt-service +output application/xml --- { ns0#APIUsageInformation: { @@ -83,14 +83,14 @@ ns ns0 http://mulesoft.org/tshirt-service - @@ -102,14 +102,14 @@ import migration::Soapkit - @@ -121,14 +121,14 @@ import migration::Soapkit - diff --git a/mule-migration-tool-expression/src/main/scala/com/mulesoft/tools/Migrator.scala b/mule-migration-tool-expression/src/main/scala/com/mulesoft/tools/Migrator.scala index bd597c231..99dfa7dfa 100644 --- a/mule-migration-tool-expression/src/main/scala/com/mulesoft/tools/Migrator.scala +++ b/mule-migration-tool-expression/src/main/scala/com/mulesoft/tools/Migrator.scala @@ -15,6 +15,7 @@ import org.mule.weave.v2.parser.ast.header.directives.{VersionDirective, Version import org.mule.weave.v2.parser.ast.structure.schema.{SchemaNode, SchemaPropertyNode} import org.mule.weave.v2.parser.ast.types.TypeReferenceNode import org.mule.weave.v2.parser.ast.variables.{NameIdentifier, VariableReferenceNode} +import org.mule.weave.v2.parser.location.UnknownLocation import org.mule.weave.v2.parser.{ast => dw} import org.mule.weave.v2.parser.ast.{AstNode => AstNodeV2} @@ -170,7 +171,7 @@ object Migrator { val rRes = toDataweaveAst(right) val variableReferenceNode = VariableReferenceNode(NameIdentifier("Java::isInstanceOf")) val metadata = lRes.metadata.children ++ rRes.metadata.children - val classNameNode = dw.structure.StringNode(rRes.getGeneratedCode(HeaderNode(Seq())).replaceFirst("---\nvars\\.", "")).annotate(QuotedStringAnnotation(''')) + val classNameNode = dw.structure.StringNode(rRes.getGeneratedCode(HeaderNode(Seq())).replaceFirst("(---\n){0,1}vars\\.", "")).annotate(QuotedStringAnnotation(''')) new MigrationResult(dw.functions.FunctionCallNode(variableReferenceNode, FunctionCallParametersNode(Seq(lRes.dwAstNode, classNameNode))), DefaultMigrationMetadata(JavaModuleRequired() +: metadata)) } @@ -178,7 +179,7 @@ object Migrator { val parameters = toDataweaveAst(parametersNode) val metadata = parameters.metadata.children val variableReferenceNode = VariableReferenceNode(NameIdentifier("Java::isCausedBy")) - val classNameNode = dw.structure.StringNode(parameters.getGeneratedCode(HeaderNode(Seq())).replaceFirst("---\nvars\\.", "")).annotate(QuotedStringAnnotation(''')) + val classNameNode = dw.structure.StringNode(parameters.getGeneratedCode(HeaderNode(Seq())).replaceFirst("(---\n){0,1}vars\\.", "")).annotate(QuotedStringAnnotation(''')) val errorCauseNode = dw.structure.StringNode("error.cause") val strictMatchNode = dw.structure.BooleanNode(strictMatch.toString) new MigrationResult(dw.functions.FunctionCallNode(variableReferenceNode, FunctionCallParametersNode(Seq(errorCauseNode, classNameNode, strictMatchNode))),DefaultMigrationMetadata(JavaModuleRequired() +: metadata)) @@ -249,7 +250,7 @@ object Migrator { private def toDataweaveEnclosedExpressionNode(expression: MelExpressionNode): MigrationResult = { val result = toDataweaveAst(expression) - new MigrationResult(result.dwAstNode.annotate(EnclosedMarkAnnotation()), DefaultMigrationMetadata(result.metadata.children)) + new MigrationResult(result.dwAstNode.annotate(EnclosedMarkAnnotation(UnknownLocation)), DefaultMigrationMetadata(result.metadata.children)) } private def toDataweaveConstructorNode(canonicalName: CanonicalNameNode, arguments: Seq[MelExpressionNode]): MigrationResult = { @@ -296,7 +297,7 @@ object Migrator { val objectNode = dw.structure.ArrayNode(Seq()) val classValue = dw.structure.StringNode(canonicalName.name) //class: "java.util.ArrayList" - val schemaProperty = SchemaPropertyNode(NameIdentifier(CLASS_PROPERTY_NAME), classValue) + val schemaProperty = SchemaPropertyNode(NameIdentifier(CLASS_PROPERTY_NAME), classValue, None) val arrayTypeRef = TypeReferenceNode(NameIdentifier("Array"), None, Some(SchemaNode(Seq(schemaProperty)))) new MigrationResult(dw.operators.BinaryOpNode(AsOpId, objectNode, arrayTypeRef)) } @@ -305,7 +306,7 @@ object Migrator { val objectNode = dw.structure.ObjectNode(Seq()) val classValue = dw.structure.StringNode(canonicalName.name) //class: "java.util.HashMap" - val schemaProperty = SchemaPropertyNode(NameIdentifier(CLASS_PROPERTY_NAME), classValue) + val schemaProperty = SchemaPropertyNode(NameIdentifier(CLASS_PROPERTY_NAME), classValue, None) val objectTypeRef = TypeReferenceNode(NameIdentifier("Object"), None, Some(SchemaNode(Seq(schemaProperty)))) new MigrationResult(dw.operators.BinaryOpNode(AsOpId, objectNode, objectTypeRef)) } diff --git a/mule-migration-tool-expression/src/test/scala/com/mulesoft/tools/MigratorTest.scala b/mule-migration-tool-expression/src/test/scala/com/mulesoft/tools/MigratorTest.scala index 9d29782ae..71d688723 100644 --- a/mule-migration-tool-expression/src/test/scala/com/mulesoft/tools/MigratorTest.scala +++ b/mule-migration-tool-expression/src/test/scala/com/mulesoft/tools/MigratorTest.scala @@ -187,4 +187,12 @@ class MigratorTest extends FlatSpec with Matchers { it should "fail with dw function with no inline script" in { Migrator.migrate("dw(flowVars.test)").metadata.children.head shouldBe NonMigratable("expressions.methodInvocation") } + + it should "migrate mel expression with isInstanceOf function" in { + Migrator.migrate("a instanceof org.mule.SomeClass").getGeneratedCode() shouldBe "%dw 2.0\n---\nJava::isInstanceOf(vars.a, 'org.mule.SomeClass')" + } + + it should "migrate mel expression with isCausedBy function" in { + Migrator.migrate("exception.causedBy(org.mule.RuntimeException)").getGeneratedCode() shouldBe "%dw 2.0\n---\nJava::isCausedBy(error.cause, 'org.mule.RuntimeException', false)" + } } diff --git a/pom.xml b/pom.xml index 9295005c2..382b08bb3 100644 --- a/pom.xml +++ b/pom.xml @@ -113,8 +113,8 @@ 2.2.1 1.1.5 - 2.1.10 - 2.1.3 + 2.4.0 + 2.4.0 ${basedir}/lib