[jboss-svn-commits] JBL Code SVN: r6528 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: base util/asm

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 2 14:33:22 EDT 2006


Author: tirelli
Date: 2006-10-02 14:33:16 -0400 (Mon, 02 Oct 2006)
New Revision: 6528

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java
Log:
JBRULES-44:
  
  * Ignoring final methods when overrinding methods in the proxy



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	2006-10-02 18:28:22 UTC (rev 6527)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2006-10-02 18:33:16 UTC (rev 6528)
@@ -43,7 +43,7 @@
 
     public static Class getProxy(final Class clazz) {
         try {
-            final ClassFieldInspector inspector = new ClassFieldInspector( clazz );
+            final ClassFieldInspector inspector = new ClassFieldInspector( clazz, false );
             final String className = Type.getInternalName( clazz ) + "ShadowProxy";
             // generating byte array to create target class
             final byte[] bytes = dump( clazz,
@@ -78,9 +78,6 @@
         Map fieldNames = inspector.getFieldNames();
         Map fieldTypes = inspector.getFieldTypes();
         Map fieldGetters = inspector.getGetterMethods();
-        fieldNames.remove( "class" );
-        fieldTypes.remove( "class" );
-        fieldGetters.remove( "class" );
         for ( Iterator it = fieldNames.keySet().iterator(); it.hasNext(); ) {
             String fieldName = (String) it.next();
             buildField( FIELD_NAME_PREFIX + fieldName,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java	2006-10-02 18:28:22 UTC (rev 6527)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java	2006-10-02 18:33:16 UTC (rev 6528)
@@ -57,25 +57,30 @@
      * @throws IOException
      */
     public ClassFieldInspector(final Class clazz) throws IOException {
-        processClass( clazz );
+        this(clazz, true);
     }
+    
+    public ClassFieldInspector(final Class clazz, final boolean includeFinalMethods) throws IOException {
+        processClass( clazz, includeFinalMethods );
+    }
 
     /** Walk up the inheritance hierarchy recursively, reading in fields */
-    private void processClass(final Class clazz) throws IOException {
+    private void processClass(final Class clazz, final boolean includeFinalMethods) throws IOException {
         final String name = getResourcePath( clazz );
         final InputStream stream = clazz.getResourceAsStream( name );
         final ClassReader reader = new ClassReader( stream );
         final ClassFieldVisitor visitor = new ClassFieldVisitor( clazz,
+                                                                 includeFinalMethods,
                                                                  this );
         reader.accept( visitor,
                        false );
         if ( clazz.getSuperclass() != null ) {
-            processClass( clazz.getSuperclass() );
+            processClass( clazz.getSuperclass(), includeFinalMethods );
         }
         if ( clazz.isInterface() ) {
             final Class[] interfaces = clazz.getInterfaces();
             for ( int i = 0; i < interfaces.length; i++ ) {
-                processClass( interfaces[i] );
+                processClass( interfaces[i], includeFinalMethods );
             }
         }
     }
@@ -128,10 +133,13 @@
 
         private Class               clazz;
         private ClassFieldInspector inspector;
+        private boolean             includeFinalMethods;
 
         ClassFieldVisitor(final Class cls,
+                          final boolean includeFinalMethods,
                           final ClassFieldInspector inspector) {
             this.clazz = cls;
+            this.includeFinalMethods = includeFinalMethods;
             this.inspector = inspector;
         }
 
@@ -140,9 +148,10 @@
                                          final String desc,
                                          final String signature,
                                          final String[] exceptions) {
-            //only want public methods that start with 'get' or 'is'
+            //only want public methods
             //and have no args, and return a value
-            if ( (access & Opcodes.ACC_PUBLIC) > 0 ) {
+            int mask = this.includeFinalMethods ? Opcodes.ACC_PUBLIC : Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL;
+            if ( (access & mask) == Opcodes.ACC_PUBLIC ) {
                 if ( desc.startsWith( "()" ) && !(name.equals( "<init>" )) ) {// && ( name.startsWith("get") || name.startsWith("is") ) ) {
                     try {
                         final Method method = this.clazz.getMethod( name,




More information about the jboss-svn-commits mailing list