[jboss-svn-commits] JBL Code SVN: r12971 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/reteoo and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jul 1 09:58:46 EDT 2007


Author: tirelli
Date: 2007-07-01 09:58:46 -0400 (Sun, 01 Jul 2007)
New Revision: 12971

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Log:
JBRULES-854: fixing NPE

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-01 13:12:48 UTC (rev 12970)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-01 13:58:46 UTC (rev 12971)
@@ -475,7 +475,7 @@
             } else {
                 this.ovalue = extractor.getValue( null, value );
                 this.type = OBJECT;
-                this.setHashCode( this.ovalue.hashCode() );
+                this.setHashCode( this.ovalue != null ? this.ovalue.hashCode() : 0 );
             }
         }
 
@@ -498,7 +498,7 @@
             } else {
                 this.ovalue = value.getValue();
                 this.type = OBJECT;
-                this.setHashCode( this.ovalue.hashCode() );
+                this.setHashCode( this.ovalue != null ? this.ovalue.hashCode() : 0 );
             }
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2007-07-01 13:12:48 UTC (rev 12970)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2007-07-01 13:58:46 UTC (rev 12971)
@@ -4,6 +4,8 @@
 
 import junit.framework.TestCase;
 
+import org.drools.Cheese;
+import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.base.evaluators.StringFactory;
@@ -24,8 +26,8 @@
     public void testBeta() {
         final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
         final MockBetaNode beta = new MockBetaNode( 0,
-                                              null,
-                                              null );
+                                                    null,
+                                                    null );
         ad.addObjectSink( beta );
         assertEquals( 1,
                       ad.getSinks().length );
@@ -50,11 +52,11 @@
     public void testAlphaWithPredicate() {
         final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
         final AlphaNode al = new AlphaNode( 0,
-                                      new PredicateConstraint( null,
-                                                               null ),
-                                      null,
-                                      true,
-                                      3  );
+                                            new PredicateConstraint( null,
+                                                                     null ),
+                                            null,
+                                            true,
+                                            3 );
         ad.addObjectSink( al );
 
         assertEquals( 1,
@@ -75,13 +77,13 @@
 
         final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
         final LiteralConstraint lit = new LiteralConstraint( new MockExtractor(),
-                                                       StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                       new ObjectFieldImpl( "stilton" ) );
+                                                             StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                             new ObjectFieldImpl( "stilton" ) );
         final AlphaNode al = new AlphaNode( 0,
-                                      lit,
-                                      new MockObjectSource( 0 ),
-                                      true,
-                                      3  );
+                                            lit,
+                                            new MockObjectSource( 0 ),
+                                            true,
+                                            3 );
 
         ad.addObjectSink( al );
 
@@ -102,13 +104,13 @@
 
         final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
         final LiteralConstraint lit = new LiteralConstraint( new MockExtractor(),
-                                                       StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                       new ObjectFieldImpl( "stilton" ) );
+                                                             StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                             new ObjectFieldImpl( "stilton" ) );
         final AlphaNode al = new AlphaNode( 0,
-                                      lit,
-                                      new MockObjectSource( 0 ),
-                                      true,
-                                      3  );
+                                            lit,
+                                            new MockObjectSource( 0 ),
+                                            true,
+                                            3 );
 
         ad.addObjectSink( al );
 
@@ -120,13 +122,13 @@
                       ad.getSinks()[0] );
 
         final LiteralConstraint lit2 = new LiteralConstraint( new MockExtractor(),
-                                                        StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                        new ObjectFieldImpl( "cheddar" ) );
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "cheddar" ) );
         final AlphaNode al2 = new AlphaNode( 1,
-                                       lit2,
-                                       new MockObjectSource( 0 ),
-                                       true,
-                                       3  );
+                                             lit2,
+                                             new MockObjectSource( 0 ),
+                                             true,
+                                             3 );
 
         ad.addObjectSink( al2 );
 
@@ -140,8 +142,8 @@
 
         //add a beta, just for good measure, make sure it leaves others alone
         final MockBetaNode beta = new MockBetaNode( 0,
-                                              null,
-                                              null );
+                                                    null,
+                                                    null );
         ad.addObjectSink( beta );
         assertNotNull( ad.otherSinks );
         assertEquals( 2,
@@ -162,13 +164,13 @@
     public void testTripleAlpha() {
         final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
         final LiteralConstraint lit = new LiteralConstraint( new MockExtractor(),
-                                                       StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                       new ObjectFieldImpl( "stilton" ) );
+                                                             StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                             new ObjectFieldImpl( "stilton" ) );
         final AlphaNode al = new AlphaNode( 0,
-                                      lit,
-                                      new MockObjectSource( 0 ),
-                                      true,
-                                      3  );
+                                            lit,
+                                            new MockObjectSource( 0 ),
+                                            true,
+                                            3 );
 
         ad.addObjectSink( al );
 
@@ -180,13 +182,13 @@
                       ad.getSinks()[0] );
 
         final LiteralConstraint lit2 = new LiteralConstraint( new MockExtractor(),
-                                                        StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                        new ObjectFieldImpl( "cheddar" ) );
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "cheddar" ) );
         final AlphaNode al2 = new AlphaNode( 1,
-                                       lit2,
-                                       new MockObjectSource( 1 ),
-                                       true,
-                                       3  );
+                                             lit2,
+                                             new MockObjectSource( 1 ),
+                                             true,
+                                             3 );
 
         ad.addObjectSink( al2 );
 
@@ -195,13 +197,13 @@
                       ad.hashableSinks.size() );
 
         final LiteralConstraint lit3 = new LiteralConstraint( new MockExtractor(),
-                                                        StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
-                                                        new ObjectFieldImpl( "stinky" ) );
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "stinky" ) );
         final AlphaNode al3 = new AlphaNode( 1,
-                                       lit3,
-                                       new MockObjectSource( 2 ),
-                                       true,
-                                       3  );
+                                             lit3,
+                                             new MockObjectSource( 2 ),
+                                             true,
+                                             3 );
         ad.addObjectSink( al3 );
 
         //this should now be nicely hashed.
@@ -217,6 +219,54 @@
 
     }
 
+    public void testPropagationWithNullValue() {
+
+        final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
+        FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
+                                                                          "type",
+                                                                          this.getClass().getClassLoader() );
+        final LiteralConstraint lit1 = new LiteralConstraint( extractor,
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "stilton" ) );
+        final AlphaNode al1 = new AlphaNode( 0,
+                                             lit1,
+                                             new MockObjectSource( 0 ),
+                                             true,
+                                             3 );
+
+        final LiteralConstraint lit2 = new LiteralConstraint( extractor,
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "brie" ) );
+        final AlphaNode al2 = new AlphaNode( 0,
+                                             lit2,
+                                             new MockObjectSource( 0 ),
+                                             true,
+                                             3 );
+
+        final LiteralConstraint lit3 = new LiteralConstraint( extractor,
+                                                              StringFactory.getInstance().getEvaluator( Operator.EQUAL ),
+                                                              new ObjectFieldImpl( "muzzarela" ) );
+        final AlphaNode al3 = new AlphaNode( 0,
+                                             lit3,
+                                             new MockObjectSource( 0 ),
+                                             true,
+                                             3 );
+
+        ad.addObjectSink( al1 );
+        ad.addObjectSink( al2 );
+        ad.addObjectSink( al3 );
+
+        InternalFactHandle handle = new ReteooFactHandleFactory().newFactHandle( new Cheese() );
+        try {
+            ad.propagateAssertObject( handle,
+                                      null,
+                                      null );
+        } catch ( RuntimeException e ) {
+            fail( "Not supposed to throw any exception: "+e.getMessage());
+        }
+
+    }
+
     static class MockExtractor
         implements
         FieldExtractor {
@@ -226,22 +276,26 @@
             return 0;
         }
 
-        public boolean getBooleanValue(InternalWorkingMemory workingMemory, final Object object) {
+        public boolean getBooleanValue(InternalWorkingMemory workingMemory,
+                                       final Object object) {
             //  Auto-generated method stub
             return false;
         }
 
-        public byte getByteValue(InternalWorkingMemory workingMemory, final Object object) {
+        public byte getByteValue(InternalWorkingMemory workingMemory,
+                                 final Object object) {
             //  Auto-generated method stub
             return 0;
         }
 
-        public char getCharValue(InternalWorkingMemory workingMemory, final Object object) {
+        public char getCharValue(InternalWorkingMemory workingMemory,
+                                 final Object object) {
             //  Auto-generated method stub
             return 0;
         }
 
-        public double getDoubleValue(InternalWorkingMemory workingMemory, final Object object) {
+        public double getDoubleValue(InternalWorkingMemory workingMemory,
+                                     final Object object) {
             //  Auto-generated method stub
             return 0;
         }
@@ -251,17 +305,20 @@
             return null;
         }
 
-        public float getFloatValue(InternalWorkingMemory workingMemory, final Object object) {
+        public float getFloatValue(InternalWorkingMemory workingMemory,
+                                   final Object object) {
             //  Auto-generated method stub
             return 0;
         }
 
-        public int getIntValue(InternalWorkingMemory workingMemory, final Object object) {
+        public int getIntValue(InternalWorkingMemory workingMemory,
+                               final Object object) {
             //  Auto-generated method stub
             return 0;
         }
 
-        public long getLongValue(InternalWorkingMemory workingMemory, final Object object) {
+        public long getLongValue(InternalWorkingMemory workingMemory,
+                                 final Object object) {
             //  Auto-generated method stub
             return 0;
         }
@@ -271,17 +328,20 @@
             return null;
         }
 
-        public short getShortValue(InternalWorkingMemory workingMemory, final Object object) {
+        public short getShortValue(InternalWorkingMemory workingMemory,
+                                   final Object object) {
             //  Auto-generated method stub
             return 0;
         }
 
-        public Object getValue(InternalWorkingMemory workingMemory, final Object object) {
+        public Object getValue(InternalWorkingMemory workingMemory,
+                               final Object object) {
             //  Auto-generated method stub
             return null;
         }
-        
-        public boolean isNullValue(final Object object, InternalWorkingMemory workingMemory) {
+
+        public boolean isNullValue(final Object object,
+                                   InternalWorkingMemory workingMemory) {
             return false;
         }
 
@@ -290,7 +350,8 @@
             return null;
         }
 
-        public int getHashCode(InternalWorkingMemory workingMemory, final Object object) {
+        public int getHashCode(InternalWorkingMemory workingMemory,
+                               final Object object) {
             return 0;
         }
 




More information about the jboss-svn-commits mailing list