[jboss-svn-commits] JBL Code SVN: r18645 - in labs/jbossrules/branches/4.0.x: drools-compiler/src/test/resources/org/drools/integrationtests and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Feb 29 16:11:28 EST 2008


Author: tirelli
Date: 2008-02-29 16:11:28 -0500 (Fri, 29 Feb 2008)
New Revision: 18645

Added:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_NPEOnMVELPredicate.drl
Modified:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/FromNode.java
Log:
JBRULES-1492: fixing NPE

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-02-29 19:29:15 UTC (rev 18644)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-02-29 21:11:28 UTC (rev 18645)
@@ -4813,4 +4813,43 @@
 
     }
 
+    public void testNPEOnMVELAlphaPredicates() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NPEOnMVELPredicate.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final StatefulSession session = ruleBase.newStatefulSession();
+
+        final List list = new ArrayList();
+        session.setGlobal( "results",
+                                 list );
+        
+        Cheese cheese = new Cheese( "stilton", 10 );
+        Cheesery cheesery = new Cheesery();
+        cheesery.addCheese( cheese );
+        Person bob = new Person( "bob", "stilton" );
+        Cheese cheese2 = new Cheese();
+        bob.setCheese( cheese2 );
+
+        FactHandle p = session.insert( bob );
+        FactHandle c = session.insert( cheesery );
+
+        session.fireAllRules();
+
+        assertEquals( "should not have fired",
+                      0,
+                      list.size() );
+        
+        cheese2.setType( "stilton" );
+        
+        session.update( p, bob );
+        session.fireAllRules();
+        
+        assertEquals( 1,
+                      list.size() );
+        
+    }
+    
 }

Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_NPEOnMVELPredicate.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_NPEOnMVELPredicate.drl	                        (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_NPEOnMVELPredicate.drl	2008-02-29 21:11:28 UTC (rev 18645)
@@ -0,0 +1,11 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "test NPE on mvel predicate"
+when
+    $p : Person( cheese.type != null )
+    $q : Cheese( ) from $p.cheese
+then
+    results.add( $q );
+end
\ No newline at end of file

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2008-02-29 19:29:15 UTC (rev 18644)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2008-02-29 21:11:28 UTC (rev 18645)
@@ -27,6 +27,7 @@
 import org.drools.rule.ContextEntry;
 import org.drools.rule.VariableConstraint;
 import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.util.AbstractHashTable;
 import org.drools.util.FactHashTable;
 import org.drools.util.FactHandleIndexHashTable;
 import org.drools.util.LinkedList;

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-02-29 19:29:15 UTC (rev 18644)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-02-29 21:11:28 UTC (rev 18645)
@@ -194,7 +194,9 @@
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
         final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
-        memory.betaMemory.getTupleMemory().remove( leftTuple );
+        if( memory.betaMemory.getTupleMemory().remove( leftTuple ) == null) {
+            return;
+        }
         final AccumulateResult accresult = (AccumulateResult) memory.betaMemory.getCreatedHandles().remove( leftTuple );
 
         // if tuple was propagated

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-02-29 19:29:15 UTC (rev 18644)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-02-29 21:11:28 UTC (rev 18645)
@@ -175,7 +175,9 @@
                              final InternalWorkingMemory workingMemory) {
 
         final CollectMemory memory = (CollectMemory) workingMemory.getNodeMemory( this );
-        memory.betaMemory.getTupleMemory().remove( leftTuple );
+        if( memory.betaMemory.getTupleMemory().remove( leftTuple ) == null ) {
+            return;
+        }
         CollectResult result = (CollectResult) memory.betaMemory.getCreatedHandles().remove( leftTuple );
         final InternalFactHandle handle = result.handle;
 

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-02-29 19:29:15 UTC (rev 18644)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-02-29 21:11:28 UTC (rev 18645)
@@ -118,6 +118,10 @@
         final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
         final ReteTuple tuple = memory.betaMemory.getTupleMemory().remove( leftTuple );
 
+        if ( tuple == null ) {
+            return;
+        }
+
         final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
         // if tuple was propagated
         if ( list != null ) {




More information about the jboss-svn-commits mailing list