This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new 3f65da3b0a [DROOLS-6340] preserve order of used declaration traversing 
method expressions recursively (#6344)
3f65da3b0a is described below

commit 3f65da3b0a7be27d0bd93d96b0cc4787711a12c4
Author: Mario Fusco <[email protected]>
AuthorDate: Wed May 14 17:43:05 2025 +0200

    [DROOLS-6340] preserve order of used declaration traversing method 
expressions recursively (#6344)
---
 .../codegen/execmodel/generator/DrlxParseUtil.java      | 17 ++++++++++-------
 .../model/codegen/execmodel/MixedArgumentTest.java      |  9 ++++-----
 .../drools/model/codegen/execmodel/domain/Person.java   |  4 ++++
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/DrlxParseUtil.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/DrlxParseUtil.java
index e66d84bc0c..9612dd1075 100644
--- 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/DrlxParseUtil.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/DrlxParseUtil.java
@@ -895,15 +895,18 @@ public class DrlxParseUtil {
     }
 
     public static List<String> collectUsedDeclarationsInExpression(Expression 
expr) {
-        Stream<NameExpr> namesStream = expr instanceof MethodCallExpr 
methodCallExpr ?
+        return exprToOrderedNameExprStream(expr)
+                .map(NameExpr::getName)
+                .map(SimpleName::getIdentifier)
+                .distinct()
+                .collect(toList());
+    }
+
+    private static Stream<NameExpr> exprToOrderedNameExprStream(Expression 
expr) {
+        return expr instanceof MethodCallExpr methodCallExpr ?
                 Stream.concat(methodCallExpr.getScope().stream(), 
methodCallExpr.getArguments().stream())
-                        .flatMap(e -> e.findAll(NameExpr.class).stream()) :
+                        .flatMap(DrlxParseUtil::exprToOrderedNameExprStream) :
                 expr.findAll(NameExpr.class).stream();
-
-        return namesStream.map(NameExpr::getName)
-                   .map(SimpleName::getIdentifier)
-                   .distinct()
-                   .collect(toList());
     }
 
     public static Optional<java.lang.reflect.Type> 
safeResolveType(TypeResolver typeResolver, String typeName) {
diff --git 
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/MixedArgumentTest.java
 
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/MixedArgumentTest.java
index 6c8a87e0c4..dca1d8062c 100644
--- 
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/MixedArgumentTest.java
+++ 
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/MixedArgumentTest.java
@@ -24,10 +24,6 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 import org.kie.api.runtime.KieSession;
 
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -48,15 +44,18 @@ public class MixedArgumentTest extends BaseModelTest {
             "    $person2 : Person(age == 40)\n" +
             "    $child2 : Child(age == 5 && parent == \"Bob\")\n" +
             "    $personNo : Integer() from doNothing($person1, 
$child1.getName, $child2.getName, $person2.getName)\n" +
+            "    $person_method : Integer() from 
doNothingAgain($person1.addAges($child1.getAge, $child2.getAge))\n" +
             "then \n" +
             "     result.add($personNo); \n " +
             "end \n" +
             "\n" +
             "function Integer doNothing(Person person, String firstName, 
String secondName, String thirdName) {\n" +
             "    return 1; \n" +
+            "}\n" +
+            "function Integer doNothingAgain(int age) {\n" +
+            "    return 1; \n" +
             "}";
 
-
     @ParameterizedTest
     @MethodSource("parameters")
     void mixedArgumentsTest(RUN_TYPE runType){
diff --git 
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/domain/Person.java
 
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/domain/Person.java
index 2e17db7495..47b889b530 100644
--- 
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/domain/Person.java
+++ 
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/domain/Person.java
@@ -329,4 +329,8 @@ public class Person extends AbstractReactiveObject {
     public static boolean isEvenFloat( float i ){
         return (i % 2) == 0;
     }
+
+    public int addAges(int age1, int age2) {
+        return age1 + age2;
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to