[jboss-svn-commits] JBL Code SVN: r13015 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 2 15:15:01 EDT 2007


Author: tirelli
Date: 2007-07-02 15:15:01 -0400 (Mon, 02 Jul 2007)
New Revision: 13015

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
Log:
JBRULES-960: not generating proxy for classes with final equals and hashcode

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-07-02 19:03:16 UTC (rev 13014)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2007-07-02 19:15:01 UTC (rev 13015)
@@ -50,7 +50,7 @@
 
     public static Class getProxy(final Class clazz) {
         try {
-            if ( (clazz.getModifiers() & Modifier.FINAL) != 0 ) {
+            if ( !isPossibleToGenerateTheProxyFor( clazz ) ) {
                 return null;
             }
 
@@ -71,7 +71,7 @@
 
     public static byte[] getProxyBytes(final Class clazz) {
         try {
-            if ( (clazz.getModifiers() & Modifier.FINAL) != 0 ) {
+            if ( !isPossibleToGenerateTheProxyFor( clazz ) ) {
                 return null;
             }
 
@@ -84,6 +84,21 @@
             throw new RuntimeDroolsException( e );
         }
     }
+    
+    protected static boolean isPossibleToGenerateTheProxyFor( final Class clazz) throws Exception {
+        if ( (clazz.getModifiers() & Modifier.FINAL) != 0 ) {
+            return false;
+        }
+        Method equals = clazz.getMethod( "equals", new Class[] { Object.class } );
+        if( Modifier.isFinal( equals.getModifiers() ) ) {
+            return false;
+        }
+        Method hashcode = clazz.getMethod( "hashCode", new Class[0] );
+        if( Modifier.isFinal( hashcode.getModifiers() ) ) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * @param clazz
@@ -141,6 +156,7 @@
         for ( int i = 0; i < methods.length; i++ ) {
             if ( (!Modifier.isFinal( methods[i].getModifiers() )) && Modifier.isPublic( methods[i].getModifiers() ) && (!Modifier.isStatic( methods[i].getModifiers() )) ) {
                 if ( (!methods[i].getReturnType().equals( Void.TYPE )) && (methods[i].getParameterTypes().length == 0) && (!methods[i].getName().equals( "hashCode" )) && (!methods[i].getName().equals( "toString" )) ) {
+                    System.out.println("Caching: "+methods[i].toString());
 
                     final String fieldName = methods[i].getName();
 
@@ -161,6 +177,7 @@
                                     clazz,
                                     cw );
                 } else if ( (!methods[i].getName().equals( "hashCode" )) && (!methods[i].getName().equals( "equals" )) ) {
+                    System.out.println("Delegating: "+methods[i].toString());
                     buildDelegateMethod( methods[i],
                                          clazz,
                                          className,




More information about the jboss-svn-commits mailing list