[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