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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 8 10:53:30 EDT 2007


Author: tirelli
Date: 2007-05-08 10:53:30 -0400 (Tue, 08 May 2007)
New Revision: 11751

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Cheese.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ShadowProxyFactoryTest.java
Log:
JBRULES-750: fixing shadow proxy generation problem. Unit test added

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2007-05-08 14:30:43 UTC (rev 11750)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2007-05-08 14:53:30 UTC (rev 11751)
@@ -652,9 +652,11 @@
                            Type.getDescriptor( clazz ) );
 
         final Class[] parameters = method.getParameterTypes();
-        for ( int i = 0; i < parameters.length; i++ ) {
-            mv.visitVarInsn( Type.getType( parameters[i] ).getOpcode( Opcodes.ILOAD ),
-                             i + 1 );
+        for ( int i = 0, offset = 1; i < parameters.length; i++ ) {
+            Type type = Type.getType( parameters[i] );
+            mv.visitVarInsn( type.getOpcode( Opcodes.ILOAD ),
+                             offset );
+            offset += type.getSize();
         }
         mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
                             Type.getInternalName( clazz ),
@@ -669,13 +671,14 @@
                                l0,
                                l1,
                                0 );
-        for ( int i = 0; i < parameters.length; i++ ) {
+        for ( int i = 0, offset = 0; i < parameters.length; i++ ) {
             mv.visitLocalVariable( "arg" + i,
                                    Type.getDescriptor( parameters[i] ),
                                    null,
                                    l0,
                                    l1,
-                                   i + 1 );
+                                   offset );
+            offset += Type.getType( parameters[i] ).getSize();
         }
         mv.visitMaxs( 0,
                       0 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Cheese.java	2007-05-08 14:30:43 UTC (rev 11750)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Cheese.java	2007-05-08 14:53:30 UTC (rev 11751)
@@ -74,6 +74,16 @@
     public void setType(final String type) {
         this.type = type;
     }
+    
+    /**
+     * This is a test method to test shadow proxy delegation
+     * when in the presence of a long or double parameter
+     * @param newPrice
+     * @param bla
+     */
+    public void updatePriceFromLong( long newPrice, double xyz, String bla ) {
+        this.price = (int) newPrice;
+    }
 
     public String toString() {
         return "Cheese type='" + this.type + "' price='" + this.price + "'";

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ShadowProxyFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ShadowProxyFactoryTest.java	2007-05-08 14:30:43 UTC (rev 11750)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ShadowProxyFactoryTest.java	2007-05-08 14:53:30 UTC (rev 11751)
@@ -269,4 +269,31 @@
         }
     }
 
+    public void testClassWithDelegateMethodWithLongParam() {
+        try {
+            // creating original object
+            final String originalType = "stilton";
+            final int originalPrice = 15;
+            final Cheese cheese = new Cheese( originalType,
+                                              originalPrice );
+
+            // creating proxy
+            final Class proxy = ShadowProxyFactory.getProxy( Cheese.class );
+            final Cheese cheeseProxy1 = (Cheese) proxy.getConstructor( new Class[]{Cheese.class} ).newInstance( new Object[]{cheese} );
+            final Cheese cheeseProxy2 = (Cheese) proxy.getConstructor( new Class[]{Cheese.class} ).newInstance( new Object[]{cheese} );
+
+            final int cheesehash = cheeseHashCode( cheese );
+            Assert.assertEquals( cheeseProxy1,
+                                 cheeseProxy2 );
+            Assert.assertEquals( cheeseProxy2,
+                                 cheeseProxy1 );
+            Assert.assertEquals( cheesehash,
+                                 cheeseProxy1.hashCode() );
+
+        } catch ( final Exception e ) {
+            e.printStackTrace();
+            fail( "Error: " + e.getMessage() );
+        }
+    }
+
 }




More information about the jboss-svn-commits mailing list