Details
-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
None
Description
It seems that using more than one rule with "from collect"-or possibly "from collect ( Foo() from someCall() )-causes Declaration.getPattern().getOffset() to be incorrect, resulting in a NullPointerException in ReteTuple.get(int). This should be more clear after running the included code.
The following test case demonstrates the problem.
–
package sample;
import java.io.StringReader;
import java.util.HashSet;
import java.util.Set;
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
public class FromProblem {
public static void main(String[] args) throws Exception
{ final PackageBuilderConfiguration packageBuilderConfiguration = new PackageBuilderConfiguration(); final PackageBuilder packageBuilder = new PackageBuilder(packageBuilderConfiguration); packageBuilder.addPackageFromDrl(new StringReader("\n" + "package sample\n" + "\n" + "import java.util.ArrayList;" + "import sample.FromProblem;" + "global sample.FromProblem x;" + "\n" + "rule MyRule\n" + " dialect \"java\"\n" + "\n" + " when\n" + " $i : ArrayList() from collect(Integer() from x.getIntegers())\n" + " $k : ArrayList() from collect(Integer() from x.getIntegers())\n" + " then \n" + " System.out.println($i);\n" + " System.out.println($k);\n" + "end \n")); final RuleBaseConfiguration ruleBaseConfiguration = new RuleBaseConfiguration(); final RuleBase ruleBase = RuleBaseFactory.newRuleBase(ruleBaseConfiguration); ruleBase.addPackage(packageBuilder.getPackage()); final StatefulSession session = ruleBase.newStatefulSession(); session.setGlobal("x", new FromProblem()); session.fireAllRules(); }public Set<Integer> getIntegers()
{ final HashSet<Integer> set = new HashSet<Integer>(); set.add(1); return set; }}