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

tkobayas 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 a4a029d017 [incubator-kie-drools-6366] Raise a build error when insert 
etc. is used in RuleUnit rules (#6402)
a4a029d017 is described below

commit a4a029d0170caa52e1ddfb672d755d279aabaf94
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Fri Jul 18 16:11:30 2025 +0900

    [incubator-kie-drools-6366] Raise a build error when insert etc. is used in 
RuleUnit rules (#6402)
---
 .../execmodel/errors/UnsupportedMethodError.java   | 31 +++++++---------
 .../codegen/execmodel/generator/Consequence.java   | 10 ++++++
 ...UpdateNoDSTestUnit.java => ModifyTestUnit.java} | 12 +++----
 .../ruleunits/impl/RuleUnitProviderImplTest.java   | 13 +++++++
 ...oDSTestUnit.java => UnsupportedMethodTest.java} | 35 ++++++++----------
 ...oDSTestUnit.java => UnsupportedMethodUnit.java} | 16 ++++-----
 .../drools/ruleunits/impl/UpdateNoDSTestUnit.java  |  6 ++--
 .../org/drools/ruleunits/impl/Modify.drl}          | 40 +++++++--------------
 .../drools/ruleunits/impl/UnsupportedMethod.drl}   | 42 ++++++++--------------
 9 files changed, 92 insertions(+), 113 deletions(-)

diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
similarity index 53%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
index 1e7051cc9f..c75ddbd002 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
@@ -16,33 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.drools.ruleunits.impl;
+package org.drools.model.codegen.execmodel.errors;
 
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
+import org.drools.drl.parser.DroolsError;
+import org.kie.internal.builder.ResultSeverity;
 
-import java.util.ArrayList;
-import java.util.List;
+public class UnsupportedMethodError extends DroolsError {
 
-public class UpdateNoDSTestUnit implements RuleUnitData {
-    private final List<String> results = new ArrayList<>();
-    private final DataStore<Person> persons;
 
-    public UpdateNoDSTestUnit() {
-        this(DataSource.createStore());
+    public UnsupportedMethodError(String message) {
+        super(message);
     }
 
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
-        this.persons = persons;
+    @Override
+    public ResultSeverity getSeverity() {
+        return ResultSeverity.ERROR;
     }
 
-    public DataStore<Person> getPersons() {
-        return persons;
-    }
 
-    public List<String> getResults() {
-        return results;
+    @Override
+    public int[] getLines() {
+        return new int[0];
     }
 }
diff --git 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
index 9f4deab575..53cd3b2718 100644
--- 
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
+++ 
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
@@ -58,6 +58,7 @@ import 
org.drools.model.codegen.execmodel.errors.CompilationProblemErrorResult;
 import org.drools.model.codegen.execmodel.errors.ConsequenceRewriteException;
 import org.drools.model.codegen.execmodel.errors.InvalidExpressionErrorResult;
 import org.drools.model.codegen.execmodel.errors.MvelCompilationError;
+import org.drools.model.codegen.execmodel.errors.UnsupportedMethodError;
 import org.drools.modelcompiler.consequence.DroolsImpl;
 import org.drools.mvelcompiler.CompiledBlockResult;
 import org.drools.mvelcompiler.MvelCompilerException;
@@ -91,6 +92,7 @@ public class Consequence {
 
     public static final Set<String> knowledgeHelperMethods = new HashSet<>();
     public static final Set<String> implicitDroolsMethods = new HashSet<>();
+    public static final Set<String> defaultEntryPointMethods = new HashSet<>();
 
     public static final Set<String> dataStoreMethods = new HashSet<>();
 
@@ -108,6 +110,10 @@ public class Consequence {
         implicitDroolsMethods.add("retract");
         implicitDroolsMethods.add("update");
 
+        defaultEntryPointMethods.add("insert");
+        defaultEntryPointMethods.add("insertLogical");
+        defaultEntryPointMethods.add("insertAsync");
+
         knowledgeHelperMethods.add("getWorkingMemory");
         knowledgeHelperMethods.add("getRule");
         knowledgeHelperMethods.add("getMatch");
@@ -357,6 +363,10 @@ public class Consequence {
                 }
             }
         } else if ( 
implicitDroolsMethods.contains(methodCallExpr.getNameAsString()) ) {
+            if 
(defaultEntryPointMethods.contains(methodCallExpr.getNameAsString()) && 
context.getRuleUnitDescr() != null) {
+                context.addCompilationError(new UnsupportedMethodError("'" + 
methodCallExpr.getNameAsString() +
+                                                                               
"' is not supported with RuleUnit. Please use methods from DataStore or 
DataStream instead."));
+            }
             if ( methodCallExpr.getNameAsString().equals("insertLogical") && 
!TruthMaintenanceSystemFactory.present() ) {
                 context.addCompilationError(new 
MissingDependencyError(TruthMaintenanceSystemFactory.NO_TMS));
             }
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
similarity index 90%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
index 1e7051cc9f..a3d71745c4 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
@@ -18,23 +18,23 @@
  */
 package org.drools.ruleunits.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.drools.ruleunits.api.DataSource;
 import org.drools.ruleunits.api.DataStore;
 import org.drools.ruleunits.api.RuleUnitData;
 import org.drools.ruleunits.impl.domain.Person;
 
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
+public class ModifyTestUnit implements RuleUnitData {
     private final List<String> results = new ArrayList<>();
     private final DataStore<Person> persons;
 
-    public UpdateNoDSTestUnit() {
+    public ModifyTestUnit() {
         this(DataSource.createStore());
     }
 
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
+    public ModifyTestUnit(DataStore<Person> persons) {
         this.persons = persons;
     }
 
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
index f9178b06da..d98ef8ef10 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
@@ -167,6 +167,19 @@ public class RuleUnitProviderImplTest {
         }
     }
 
+    @Test
+    public void modify() {
+        ModifyTestUnit unit = new ModifyTestUnit();
+
+        try ( RuleUnitInstance<ModifyTestUnit> unitInstance = 
RuleUnitProvider.get().createRuleUnitInstance(unit) ) {
+
+            unit.getPersons().add(new Person("Mario", 17));
+
+            assertThat(unitInstance.fire()).isEqualTo(2);
+            assertThat(unit.getResults()).containsExactly("ok");
+        }
+    }
+
     @Test
     public void wrongType() {
         try {
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
similarity index 50%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
index 1e7051cc9f..cbbad247fa 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
@@ -18,31 +18,26 @@
  */
 package org.drools.ruleunits.impl;
 
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
+import org.drools.ruleunits.api.RuleUnitProvider;
 import org.drools.ruleunits.impl.domain.Person;
+import org.junit.jupiter.api.Test;
+import org.kie.api.builder.CompilationErrorsException;
 
-import java.util.ArrayList;
-import java.util.List;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-public class UpdateNoDSTestUnit implements RuleUnitData {
-    private final List<String> results = new ArrayList<>();
-    private final DataStore<Person> persons;
+public class UnsupportedMethodTest {
 
-    public UpdateNoDSTestUnit() {
-        this(DataSource.createStore());
-    }
-
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
-        this.persons = persons;
-    }
+    @Test
+    public void insert_shouldBuildError() {
+        UnsupportedMethodUnit unit = new UnsupportedMethodUnit();
+        unit.getPersons().add(new Person("John", 30));
 
-    public DataStore<Person> getPersons() {
-        return persons;
-    }
+        CompilationErrorsException exception = 
assertThrows(CompilationErrorsException.class,
+                                                            () -> 
RuleUnitProvider.get().createRuleUnitInstance(unit));
 
-    public List<String> getResults() {
-        return results;
+        assertThat(exception.getErrorMessages()).hasSize(2);
+        assertThat(exception.getErrorMessages())
+                .allSatisfy(error -> assertThat(error.getText()).contains("is 
not supported with RuleUnit"));
     }
 }
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
similarity index 82%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
index 1e7051cc9f..fcc2ca6787 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
@@ -18,31 +18,27 @@
  */
 package org.drools.ruleunits.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.drools.ruleunits.api.DataSource;
 import org.drools.ruleunits.api.DataStore;
 import org.drools.ruleunits.api.RuleUnitData;
 import org.drools.ruleunits.impl.domain.Person;
 
-import java.util.ArrayList;
-import java.util.List;
+public class UnsupportedMethodUnit implements RuleUnitData {
 
-public class UpdateNoDSTestUnit implements RuleUnitData {
-    private final List<String> results = new ArrayList<>();
     private final DataStore<Person> persons;
 
-    public UpdateNoDSTestUnit() {
+    public UnsupportedMethodUnit() {
         this(DataSource.createStore());
     }
 
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
+    public UnsupportedMethodUnit(DataStore<Person> persons) {
         this.persons = persons;
     }
 
     public DataStore<Person> getPersons() {
         return persons;
     }
-
-    public List<String> getResults() {
-        return results;
-    }
 }
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
index 1e7051cc9f..771e97464a 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
@@ -18,14 +18,14 @@
  */
 package org.drools.ruleunits.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.drools.ruleunits.api.DataSource;
 import org.drools.ruleunits.api.DataStore;
 import org.drools.ruleunits.api.RuleUnitData;
 import org.drools.ruleunits.impl.domain.Person;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class UpdateNoDSTestUnit implements RuleUnitData {
     private final List<String> results = new ArrayList<>();
     private final DataStore<Person> persons;
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
similarity index 54%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
index 1e7051cc9f..57f693db69 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
@@ -1,4 +1,4 @@
-/*
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,32 +17,18 @@
  * under the License.
  */
 package org.drools.ruleunits.impl;
+unit ModifyTestUnit;
 
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
-    private final List<String> results = new ArrayList<>();
-    private final DataStore<Person> persons;
-
-    public UpdateNoDSTestUnit() {
-        this(DataSource.createStore());
-    }
-
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
-        this.persons = persons;
-    }
-
-    public DataStore<Person> getPersons() {
-        return persons;
+rule R1 when
+    $p: /persons[ name == "Mario" ]
+then
+    modify ($p) {
+        setAge( $p.getAge() + 1 );
     }
+end
 
-    public List<String> getResults() {
-        return results;
-    }
-}
+rule R2 when
+    $p: /persons[ age >= 18 ]
+then
+    results.add("ok");
+end
\ No newline at end of file
diff --git 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
 
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
similarity index 53%
copy from 
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to 
drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
index 1e7051cc9f..e885690d88 100644
--- 
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++ 
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
@@ -1,4 +1,4 @@
-/*
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,32 +17,18 @@
  * under the License.
  */
 package org.drools.ruleunits.impl;
+unit UnsupportedMethodUnit;
 
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
+rule CallInsert
+when
+    /persons[ name == "John" ]
+then
+    insert("ABC");
+end
 
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
-    private final List<String> results = new ArrayList<>();
-    private final DataStore<Person> persons;
-
-    public UpdateNoDSTestUnit() {
-        this(DataSource.createStore());
-    }
-
-    public UpdateNoDSTestUnit(DataStore<Person> persons) {
-        this.persons = persons;
-    }
-
-    public DataStore<Person> getPersons() {
-        return persons;
-    }
-
-    public List<String> getResults() {
-        return results;
-    }
-}
+rule CallInsertLogical
+when
+    /persons[ name == "John" ]
+then
+    insertLogical("ABC");
+end


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

Reply via email to