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