You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ba...@apache.org on 2002/03/09 20:07:50 UTC

cvs commit: jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore TestPersistentClassType.java TestEnhancer.java TestSample.java storage.xml

baliuka     02/03/09 11:07:49

  Modified:    simplestore/src/java/org/apache/commons/simplestore/cache/impl
                        SoftRefMemoryCache.java
               simplestore/src/java/org/apache/commons/simplestore/jdbc
                        DriverDataSource.java
               simplestore/src/java/org/apache/commons/simplestore/persistence/impl
                        DBStorage.java MetaClassImpl.java
                        PersistentProxy.java
               simplestore/src/java/org/apache/commons/simplestore/tools
                        Enhancer.java
               simplestore/src/test/org/apache/commons/simplestore
                        TestEnhancer.java TestSample.java storage.xml
  Added:       simplestore/src/test/org/apache/commons/simplestore
                        TestPersistentClassType.java
  Log:
  Migrated form java.reflect.Proxy to BCEL
  
  Revision  Changes    Path
  1.3       +2 -2      jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/cache/impl/SoftRefMemoryCache.java
  
  Index: SoftRefMemoryCache.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/cache/impl/SoftRefMemoryCache.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SoftRefMemoryCache.java	11 Feb 2002 20:31:22 -0000	1.2
  +++ SoftRefMemoryCache.java	9 Mar 2002 19:07:49 -0000	1.3
  @@ -65,11 +65,11 @@
    *      baliuka@mwm.lt</a>
    *@author     Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
    *      g-froehlich@gmx.de</a>
  - *@version    $Id: SoftRefMemoryCache.java,v 1.2 2002/02/11 20:31:22 froehlich Exp $
  + *@version    $Id: SoftRefMemoryCache.java,v 1.3 2002/03/09 19:07:49 baliuka Exp $
    */
   public class SoftRefMemoryCache implements Cache {
   
  -    private static boolean DEBUG = true;
  +    private static boolean DEBUG = System.getProperty("DEBUG") != null;
   
       private int m_current = 0;
       private int m_maxStrongRefCount;
  
  
  
  1.6       +8 -8      jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/jdbc/DriverDataSource.java
  
  Index: DriverDataSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/jdbc/DriverDataSource.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DriverDataSource.java	8 Mar 2002 20:23:01 -0000	1.5
  +++ DriverDataSource.java	9 Mar 2002 19:07:49 -0000	1.6
  @@ -75,7 +75,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: DriverDataSource.java,v 1.5 2002/03/08 20:23:01 baliuka Exp $
  + *@version    $Id: DriverDataSource.java,v 1.6 2002/03/09 19:07:49 baliuka Exp $
    *
    */
   public class DriverDataSource implements DataSource {
  @@ -295,25 +295,25 @@
           this.ds = ds;
           
       }
  -    public Object invoke(Object arg0,java.lang.reflect.Method arg1,Object[] arg2)
  +    public Object invoke(Object object,java.lang.reflect.Method method,Object[] args)
         throws Throwable{
          
  -         if( arg1.getName().equals("close")  ) {
  +         if( method.getName().equals("close")  ) {
              used = false;
               synchronized( ds ){ 
                  ds.notifyAll();
                }  
    
              return null;     
  -         }else if (arg1.getName().equals("release")){
  +         }else if (method.getName().equals("release")){
                connection.close();
                return null;     
  -         }else if (arg1.getName().equals("isUsed")){
  +         }else if (method.getName().equals("isUsed")){
               return new Boolean(used);
  -         }else if (arg1.getName().equals("setUsed")){
  -            used = ((Boolean) arg2[0] ).booleanValue();
  +         }else if (method.getName().equals("setUsed")){
  +            used = ((Boolean) args[0] ).booleanValue();
               return null;
  -         }else    return arg1.invoke(connection,arg2) ;
  +         }else    return method.invoke(connection,args) ;
       }
      public static  ConnectionWrapper create(Connection connection, javax.sql.DataSource ds){
          return (ConnectionWrapper)
  
  
  
  1.5       +3 -4      jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java
  
  Index: DBStorage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DBStorage.java	17 Feb 2002 14:09:04 -0000	1.4
  +++ DBStorage.java	9 Mar 2002 19:07:49 -0000	1.5
  @@ -85,11 +85,11 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: DBStorage.java,v 1.4 2002/02/17 14:09:04 baliuka Exp $
  + *@version    $Id: DBStorage.java,v 1.5 2002/03/09 19:07:49 baliuka Exp $
    */
   public class DBStorage extends AbstractStorage {
       
  -    private final static boolean DEBUG = true;
  +    private final static boolean DEBUG = System.getProperty("DEBUG") != null;
       private final static String CONNECTION = "org.apache.commons.simplestore.jdbc.DBStorage.connection";
       private static Properties procedures = new Properties();
       private DataSource ds;
  @@ -250,8 +250,7 @@
           if ( excecute( sql, new Object[]{id}, rsh) == 0 ) {
               throw new ObjectNotFound(pc.getOID().toString(), null);
           }
  -        
  -        
  +                
          context.getCache().put(id, result);
           
           return result;
  
  
  
  1.5       +43 -8     jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java
  
  Index: MetaClassImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MetaClassImpl.java	28 Feb 2002 18:28:41 -0000	1.4
  +++ MetaClassImpl.java	9 Mar 2002 19:07:49 -0000	1.5
  @@ -65,10 +65,12 @@
    *
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *     baliuka@mwm.lt</a>
  - *@version    $Id: MetaClassImpl.java,v 1.4 2002/02/28 18:28:41 baliuka Exp $
  + *@version    $Id: MetaClassImpl.java,v 1.5 2002/03/09 19:07:49 baliuka Exp $
    */
   public class MetaClassImpl implements MetaClass {
  -    
  +
  +    private static final boolean DEBUG = System.getProperty("DEBUG") != null;
  +      
       private static java.util.Map persitentClasses = new java.util.Hashtable();
       private Class clasz;
       private String sqlName;
  @@ -208,7 +210,7 @@
       
       public boolean isReference(java.lang.reflect.Member member) {
           
  -      return isReference(  getPropertyIndex(member) );
  +        return isReference(  getPropertyIndex(member) );
           
       }
       public boolean isReference(int index) {
  @@ -296,6 +298,40 @@
           return clasz;
       }
       
  +    private void setDescriptors(){
  +        try{
  +            descriptors = java.beans.Introspector.getBeanInfo( clasz ).getPropertyDescriptors();
  +            java.util.List  abstractProps = new java.util.Vector();
  +            
  +            for( int i = 0; i < descriptors.length; i++ ){
  +                
  +                if( descriptors[i].getReadMethod() != null && descriptors[i].getWriteMethod() != null ) {
  +                    
  +                    if( java.lang.reflect.Modifier.isAbstract( descriptors[i].getReadMethod().getModifiers() ) &&
  +                    java.lang.reflect.Modifier.isAbstract(  descriptors[i].getWriteMethod().getModifiers() ) ){
  +                         abstractProps.add(descriptors[i]);
  +                    }
  +                }else if ( descriptors[i].getReadMethod() != null &&
  +                java.lang.reflect.Modifier.isAbstract( descriptors[i].getReadMethod().getModifiers() )){
  +                    
  +                    abstractProps.add(descriptors[i]);
  +                    
  +                }else if ( descriptors[i].getWriteMethod() != null &&
  +                java.lang.reflect.Modifier.isAbstract( descriptors[i].getWriteMethod().getModifiers() )){
  +                    
  +                    abstractProps.add(descriptors[i]);
  +                }
  +                
  +            }
  +            
  +            
  +            descriptors =  (java.beans.PropertyDescriptor[])abstractProps.toArray(new java.beans.PropertyDescriptor[]{});
  +            
  +        }catch( Exception e ){
  +            e.printStackTrace();
  +            throw new Error(e.getMessage());
  +        }
  +    }
       private void indexMethodsFromMetaData(){
           try{
               
  @@ -324,8 +360,8 @@
       
       private void indexMethods(){
           try{
  +            setDescriptors();
               
  -            descriptors = java.beans.Introspector.getBeanInfo( clasz ).getPropertyDescriptors();
               
               for( int i = 0; i < descriptors.length; i++ ){
                   
  @@ -413,7 +449,7 @@
           
           Integer index = (Integer)properties.get( field.toUpperCase() );
           if( index == null )
  -             throw new java.lang.NoSuchFieldError( clasz.getName() + "." + field );
  +            throw new java.lang.NoSuchFieldError( clasz.getName() + "." + field );
           return index.intValue();
           
       }
  @@ -449,7 +485,7 @@
               
           }
           
  -        public static final boolean DEBUG = true;
  +        private static final boolean DEBUG = System.getProperty("DEBUG") != null;
           
           public void setDocumentLocator(org.xml.sax.Locator locator ){}
           
  @@ -519,8 +555,7 @@
                       currentClass.clasz = clasz;
                       persitentClasses.put(currentClass.clasz,currentClass);
                   }
  -                
  -                currentClass.descriptors = java.beans.Introspector.getBeanInfo( currentClass.clasz ).getPropertyDescriptors();
  +                currentClass.setDescriptors();
                   currentClass.sqlName = meta.getValue("name");
                   currentClass.oidName = meta.getValue("oid");
                   
  
  
  
  1.10      +54 -7     jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java
  
  Index: PersistentProxy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PersistentProxy.java	4 Mar 2002 22:11:40 -0000	1.9
  +++ PersistentProxy.java	9 Mar 2002 19:07:49 -0000	1.10
  @@ -59,6 +59,7 @@
   import org.apache.commons.simplestore.persistence.Persistent;
   import org.apache.commons.simplestore.persistence.Context;
   import org.apache.commons.simplestore.persistence.TypeConverter;
  +import org.apache.commons.simplestore.tools.*;
   
   
   import java.io.Serializable;
  @@ -74,10 +75,12 @@
    *      baliuka@mwm.lt</a>
    *@author     Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
    *      g-froehlich@gmx.de</a>
  - *@version    $Id: PersistentProxy.java,v 1.9 2002/03/04 22:11:40 baliuka Exp $
  + *@version    $Id: PersistentProxy.java,v 1.10 2002/03/09 19:07:49 baliuka Exp $
    */
   public class PersistentProxy
  -implements MetaObject, InvocationHandler, Cloneable, Serializable {
  +implements MetaObject, /*InvocationHandler,*/ MethodInterceptor,Cloneable, Serializable {
  +    
  +    private static final boolean DEBUG = System.getProperty("DEBUG") != null;
       
       private static Map DEFAULTS = new Hashtable();
       private static Method HASH_CODE;
  @@ -117,13 +120,23 @@
       Object oid,
       boolean newCreated,
       Context context ) {
  -        
  +    try{    
           PersistentProxy handler = new PersistentProxy( persistent, oid,
           newCreated, context );
  -        Persistent p = (Persistent) Proxy.newProxyInstance(
  -        Thread.currentThread().getContextClassLoader(),
  -        new Class[]{persistent, Persistent.class},
  -        handler  );
  +        Class[] interfaces;
  +        if(persistent.isInterface()){
  +           interfaces = new Class[]{persistent, Persistent.class} ;
  +           persistent = null;
  +        }else {
  +           interfaces = new Class[]{ Persistent.class} ;
  +        }
  +        Persistent p = (Persistent)
  +        Enhancer.enhance( persistent,interfaces,handler);
  +        
  +       //  Proxy.newProxyInstance(
  +       // Thread.currentThread().getContextClassLoader(),
  +       // new Class[]{persistent, Persistent.class},
  +      //  handler  );
           handler.m_object = p;
           if ( newCreated ) {
               
  @@ -133,6 +146,10 @@
               
           }
           return p;
  +    }catch(Throwable t){
  +        t.printStackTrace();
  +       throw new Error(t.getLocalizedMessage());
  +    }
       }
       
       
  @@ -215,7 +232,37 @@
               return new Boolean(m_oid.equals(m_object.getOID()));
           }
       }
  +    public Object afterReturn(Object obj,
  +    Method method,
  +    Object[] args,
  +    Object retValFromBefore,
  +    boolean invokedSuper,
  +    Object retValFromSuper,
  +    Throwable e) 
  +    throws Throwable{
  +     if( DEBUG ){
  +      System.out.println("Invoked: " + method);
  +     }  
  +     if(e != null ){
  +         if( DEBUG ){
  +           e.printStackTrace();
  +         } 
  +         throw e;
  +     }
  +     if( invokedSuper )return   retValFromSuper;
  +     return invoke(obj,method,args); 
       
  +    
  +    }
  +    public boolean invokeSuper(Object obj,Method method,Object[] args,Object retValFromBefore) throws Throwable{
  +         if(DEBUG){
  +           System.out.println("Invoke super:" + method);
  +         }
  +            return true;
  +    }
  +    public Object beforeInvoke(Object obj,Method method,Object[] args) throws Throwable{
  +       return null;
  +    }
       public Object invoke(Object obj, Method method, Object[] obj2) throws Throwable {
           synchronized (this) {
               if (GET_META_OBJECT.equals(method)) {
  
  
  
  1.12      +626 -547  jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java
  
  Index: Enhancer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Enhancer.java	7 Mar 2002 22:02:23 -0000	1.11
  +++ Enhancer.java	9 Mar 2002 19:07:49 -0000	1.12
  @@ -52,744 +52,823 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  -
   package org.apache.commons.simplestore.tools;
  -
  -import org.apache.bcel.classfile.*;
  -import org.apache.bcel.generic.*;
  -import org.apache.bcel.Repository;
  -
  -
  +import org.apache.bcel.classfile.JavaClass;
  +import org.apache.bcel.classfile.Method;
  +import org.apache.bcel.generic.AASTORE;
  +import org.apache.bcel.generic.ACONST_NULL;
  +import org.apache.bcel.generic.ALOAD;
  +import org.apache.bcel.generic.ANEWARRAY;
  +import org.apache.bcel.generic.ARETURN;
  +import org.apache.bcel.generic.ASTORE;
  +import org.apache.bcel.generic.BIPUSH;
  +import org.apache.bcel.generic.BasicType;
  +import org.apache.bcel.generic.CHECKCAST;
  +import org.apache.bcel.generic.ClassGen;
  +import org.apache.bcel.generic.ConstantPoolGen;
  +import org.apache.bcel.generic.DLOAD;
  +import org.apache.bcel.generic.DRETURN;
  +import org.apache.bcel.generic.DUP;
  +import org.apache.bcel.generic.FLOAD;
  +import org.apache.bcel.generic.FRETURN;
  +import org.apache.bcel.generic.FieldGen;
  +import org.apache.bcel.generic.GETFIELD;
  +import org.apache.bcel.generic.GOTO;
  +import org.apache.bcel.generic.ICONST;
  +import org.apache.bcel.generic.IFEQ;
  +import org.apache.bcel.generic.ILOAD;
  +import org.apache.bcel.generic.INVOKEINTERFACE;
  +import org.apache.bcel.generic.INVOKESPECIAL;
  +import org.apache.bcel.generic.INVOKESTATIC;
  +import org.apache.bcel.generic.INVOKEVIRTUAL;
  +import org.apache.bcel.generic.IRETURN;
  +import org.apache.bcel.generic.ISTORE;
  +import org.apache.bcel.generic.Instruction;
  +import org.apache.bcel.generic.InstructionFactory;
  +import org.apache.bcel.generic.InstructionHandle;
  +import org.apache.bcel.generic.InstructionList;
  +import org.apache.bcel.generic.LLOAD;
  +import org.apache.bcel.generic.LRETURN;
  +import org.apache.bcel.generic.MethodGen;
  +import org.apache.bcel.generic.NEW;
  +import org.apache.bcel.generic.ObjectType;
  +import org.apache.bcel.generic.PUTFIELD;
  +import org.apache.bcel.generic.RETURN;
  +import org.apache.bcel.generic.Type;
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: Enhancer.java,v 1.11 2002/03/07 22:02:23 baliuka Exp $
  + *@version    $Id: Enhancer.java,v 1.12 2002/03/09 19:07:49 baliuka Exp $
    */
  -public class Enhancer implements org.apache.bcel.Constants{
  -    
  -    static boolean DEBUG = false;
  -    
  +public class Enhancer implements org.apache.bcel.Constants {
  +    static boolean DEBUG = System.getProperty("DEBUG") != null;
       static final String INTERCEPTOR_CLASS = MethodInterceptor.class.getName();
  -    
  -    static final  ObjectType BOOLEAN_OBJECT    = new ObjectType(Boolean.class.getName());
  -    static final  ObjectType INTEGER_OBJECT    = new ObjectType(Integer.class.getName());
  -    static final  ObjectType CHARACTER_OBJECT  = new ObjectType(Character.class.getName());
  -    static final  ObjectType BYTE_OBJECT       = new ObjectType(Byte.class.getName());
  -    static final  ObjectType SHORT_OBJECT      = new ObjectType(Short.class.getName());
  -    static final  ObjectType LONG_OBJECT       = new ObjectType(Long.class.getName());
  -    static final  ObjectType DOUBLE_OBJECT     = new ObjectType(Double.class.getName());
  -    static final  ObjectType FLOAT_OBJECT      = new ObjectType(Float.class.getName() );
  -    static final  ObjectType METHOD_OBJECT     = new ObjectType(java.lang.reflect.Method.class.getName() );
  -    static final  ObjectType NUMBER_OBJECT     = new ObjectType(Number.class.getName());
  -    static final  String CONSTRUCTOR_NAME      =  "<init>";
  -    static final  String FIELD_NAME            =  "h";
  -    static final  String SOURCE_FILE           =  "<generated>";
  -    static final  String CLASS_SUFIX  = "$$EnhancedBySimplestore$$";
  -    static final  String CLASS_PREFIX  = "org.apache.";
  -    
  -    private static int addAfterConstructionRef(ConstantPoolGen cp){
  -        return   cp.addMethodref( Enhancer.class.getName() ,"handleConstruction",
  -        "(Ljava/lang/Object;[Ljava/lang/Object;)V");
  -        
  -    }
  -    private static int addAfterRef( ConstantPoolGen cp ){
  -        return   cp.addInterfaceMethodref(INTERCEPTOR_CLASS,"afterReturn",
  -        "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;ZLjava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object;" );
  -    }
  -    private static int addInvokeSupperRef( ConstantPoolGen cp ){
  -        return   cp.addInterfaceMethodref(INTERCEPTOR_CLASS,"invokeSuper",
  -        "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;)Z");
  -    }
  -    
  -    private static int addBeforeRef(ConstantPoolGen cp){
  -        return   cp.addInterfaceMethodref(INTERCEPTOR_CLASS,"beforeInvoke",
  -        "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;");
  -        
  +    static final ObjectType BOOLEAN_OBJECT =
  +        new ObjectType(Boolean.class.getName());
  +    static final ObjectType INTEGER_OBJECT =
  +        new ObjectType(Integer.class.getName());
  +    static final ObjectType CHARACTER_OBJECT =
  +        new ObjectType(Character.class.getName());
  +    static final ObjectType BYTE_OBJECT = new ObjectType(Byte.class.getName());
  +    static final ObjectType SHORT_OBJECT = new ObjectType(Short.class.getName());
  +    static final ObjectType LONG_OBJECT = new ObjectType(Long.class.getName());
  +    static final ObjectType DOUBLE_OBJECT = new ObjectType(Double.class.getName());
  +    static final ObjectType FLOAT_OBJECT = new ObjectType(Float.class.getName());
  +    static final ObjectType METHOD_OBJECT =
  +        new ObjectType(java.lang.reflect.Method.class.getName());
  +    static final ObjectType NUMBER_OBJECT = new ObjectType(Number.class.getName());
  +    static final String CONSTRUCTOR_NAME = "<init>";
  +    static final String FIELD_NAME = "h";
  +    static final String SOURCE_FILE = "<generated>";
  +    static final String CLASS_SUFIX = "$$EnhancedBySimplestore$$";
  +    static final String CLASS_PREFIX = "org.apache.";
  +    private static int addAfterConstructionRef(ConstantPoolGen cp) {
  +        return cp.addMethodref(
  +            Enhancer.class.getName(),
  +            "handleConstruction",
  +            "(Ljava/lang/Object;[Ljava/lang/Object;)V");
  +    }
  +    private static int addAfterRef(ConstantPoolGen cp) {
  +        return cp.addInterfaceMethodref(
  +            INTERCEPTOR_CLASS,
  +            "afterReturn",
  +            "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;ZLjava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object;");
  +    }
  +    private static int addInvokeSupperRef(ConstantPoolGen cp) {
  +        return cp.addInterfaceMethodref(
  +            INTERCEPTOR_CLASS,
  +            "invokeSuper",
  +            "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;)Z");
  +    }
  +    private static int addBeforeRef(ConstantPoolGen cp) {
  +        return cp.addInterfaceMethodref(
  +            INTERCEPTOR_CLASS,
  +            "beforeInvoke",
  +            "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;");
       }
  -    
       private static java.util.List costructionHandlers = new java.util.Vector();
  -    
       private static java.util.Map cache = new java.util.WeakHashMap();
  -    
       /** Creates a new instance of Enchancer */
  -    protected Enhancer() {
  -    }
  -    
  -    public static void setMethodInterceptor(Object enhanced, MethodInterceptor ih)throws Throwable{
  -        
  -        enhanced.getClass().getField(FIELD_NAME).set(enhanced,ih);
  -        
  +    protected Enhancer() {}
  +    public static void setMethodInterceptor(Object enhanced, MethodInterceptor ih)
  +        throws Throwable {
  +        enhanced.getClass().getField(FIELD_NAME).set(enhanced, ih);
  +    }
  +    public static MethodInterceptor getMethodInterceptor(Object enhanced)
  +        throws Throwable {
  +        return (MethodInterceptor) enhanced.getClass().getField(FIELD_NAME).get(
  +            enhanced);
       }
  -    
  -    public static  MethodInterceptor getMethodInterceptor(Object enhanced )throws Throwable{
  -        
  -       return (MethodInterceptor)enhanced.getClass().getField(FIELD_NAME).get(enhanced);
  -        
  -    }
  -    
  -    public static void addConstructionHandler(ConstructionHandler ch){
  -        
  +    public static void addConstructionHandler(ConstructionHandler ch) {
           costructionHandlers.add(ch);
  -        
       }
  -    
  -    public static void removeConstructionHandler(ConstructionHandler ch){
  -        
  +    public static void removeConstructionHandler(ConstructionHandler ch) {
           costructionHandlers.remove(ch);
  -        
  -    }
  -    
  -    public static synchronized void handleConstruction(Object obj, Object args[])throws Throwable{
  -       
  -        for( java.util.Iterator i = costructionHandlers.iterator(); i.hasNext(); ){
  -            ((ConstructionHandler)i.next()).afterConstruction(obj,args);
  -        }
  -        
       }
  -    
  -    
  -    public static Object enhance(Class cls,Class interfaces [] , MethodInterceptor ih) throws Throwable{
  -        
  -        return enhance(cls,null,interfaces,ih,Thread.currentThread().getContextClassLoader());
  -    }
  -    
  -    
  -    public synchronized static Object enhance(Class cls,String class_name,Class interfaces[],  MethodInterceptor ih,ClassLoader loader)throws Throwable {
  -        
  -        if( cls == null ){
  +    public static synchronized void handleConstruction(Object obj, Object args[])
  +        throws Throwable {
  +        for (java.util.Iterator i = costructionHandlers.iterator(); i.hasNext();) {
  +            ((ConstructionHandler) i.next()).afterConstruction(obj, args);
  +        }
  +    }
  +    public static Object enhance(
  +        Class cls,
  +        Class interfaces[],
  +        MethodInterceptor ih)
  +        throws Throwable {
  +        return enhance(
  +            cls,
  +            null,
  +            interfaces,
  +            ih,
  +            Thread.currentThread().getContextClassLoader());
  +    }
  +    public synchronized static Object enhance(
  +        Class cls,
  +        String class_name,
  +        Class interfaces[],
  +        MethodInterceptor ih,
  +        ClassLoader loader)
  +        throws Throwable {
  +        if (cls == null) {
               cls = Enhancer.class;
           }
  -        
  -        if( class_name == null ){
  +        if (class_name == null) {
               class_name = cls.getName() + CLASS_SUFIX;
  -            if(class_name.startsWith("java")){
  -                class_name =  CLASS_PREFIX + class_name;
  +            if (class_name.startsWith("java")) {
  +                class_name = CLASS_PREFIX + class_name;
               }
           }
  -        
  -        java.util.Map map = (java.util.Map)cache.get(loader);
  -        
  -        if( map == null){
  +        java.util.Map map = (java.util.Map) cache.get(loader);
  +        if (map == null) {
               map = new java.util.HashMap();
  -            cache.put( loader, map );
  -            
  +            cache.put(loader, map);
           }
  -        
  -        Class result = (Class)map.get(cls);
  -        
  -        if(result == null){
  +        Class result = (Class) map.get(cls);
  +        if (result == null) {
               java.util.HashMap methods = new java.util.HashMap();
  -            JavaClass clazz = enhance(cls, class_name, interfaces , methods);
  -            byte b [] = clazz.getBytes();
  +            JavaClass clazz = enhance(cls, class_name, interfaces, methods);
  +            byte b[] = clazz.getBytes();
               java.lang.reflect.Method m =
  -            ClassLoader.class.getDeclaredMethod("defineClass",
  -            new Class[]{String.class,byte[].class,int.class,int.class}
  -            );
  +                ClassLoader.class.getDeclaredMethod(
  +                    "defineClass",
  +                    new Class[] { String.class, byte[].class, int.class, int.class });
               // protected method invocaton
               boolean flag = m.isAccessible();
               m.setAccessible(true);
  -            result = (Class)m.invoke(loader,new Object[]{clazz.getClassName(),b,new Integer(0),new Integer(b.length)});
  +            result =
  +                (Class) m.invoke(
  +                    loader,
  +                    new Object[] { clazz.getClassName(), b, new Integer(0), new Integer(b.length)});
               m.setAccessible(flag);
  -            for( java.util.Iterator i =  methods.keySet().iterator(); i.hasNext();  ){
  -                String name = (String)i.next();
  -                result.getField( name ).set(null,methods.get(name));
  -                
  -            }
  -            map.put(cls,result);
  -        }
  -        return result.getConstructor(new Class[]{Class.forName( 
  -        MethodInterceptor.class.getName(),true,loader)} ).
  -        newInstance(new Object[]{ih});
  -    }
  -    
  -    
  -    
  -    private static void addConstructors(ClassGen  cg, Class superClass )throws Throwable{
  -        addConstructor(cg);//default
  +            for (java.util.Iterator i = methods.keySet().iterator(); i.hasNext();) {
  +                String name = (String) i.next();
  +                result.getField(name).set(null, methods.get(name));
  +            }
  +            map.put(cls, result);
  +        }
  +        return result
  +            .getConstructor(
  +                new Class[] { Class.forName(MethodInterceptor.class.getName(), true, loader)})
  +            .newInstance(new Object[] { ih });
  +    }
  +    private static void addConstructors(ClassGen cg, Class superClass)
  +        throws Throwable {
  +        addConstructor(cg); //default
           java.lang.reflect.Constructor constructors[] = superClass.getConstructors();
           String parentClass = cg.getSuperclassName();
           InstructionFactory factory = new InstructionFactory(cg);
           ConstantPoolGen cp = cg.getConstantPool(); // cg creates constant pool
  -        for ( int i = 0; i < constructors.length; i++   ){
  +        for (int i = 0; i < constructors.length; i++) {
               Class parmTypes[] = constructors[i].getParameterTypes();
  -            if( parmTypes.length == 1 &&
  -            parmTypes[0].equals(org.apache.commons.simplestore.tools.MethodInterceptor.class) ) {
  +            if (parmTypes.length == 1
  +                && parmTypes[0].equals(
  +                    org.apache.commons.simplestore.tools.MethodInterceptor.class)) {
                   continue;
               }
               InstructionList il = new InstructionList();
  -            MethodGen costructor  = toMethodGen(constructors[i],cg.getClassName(), il, cp);
  +            MethodGen costructor = toMethodGen(constructors[i], cg.getClassName(), il, cp);
               Type argTypes[] = toType(parmTypes);
  -            invokeSuper( cg, costructor, argTypes );
  -            
  -            int argArray = createArgArray(il,factory,cp,argTypes);
  -            il.append( new ASTORE( argArray ));
  -            il.append( new ALOAD(0) );
  -            il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),GETFIELD));
  -            il.append( new ALOAD(0) );
  -            il.append( new ALOAD( argArray  ) );
  -            il.append( new INVOKESTATIC( addAfterConstructionRef(cp) ));
  -            
  -            il.append( new RETURN() ) ;
  -            
  +            invokeSuper(cg, costructor, argTypes);
  +            int argArray = createArgArray(il, factory, cp, argTypes);
  +            il.append(new ASTORE(argArray));
  +            il.append(new ALOAD(0));
  +            il.append(
  +                factory.createFieldAccess(
  +                    cg.getClassName(),
  +                    FIELD_NAME,
  +                    new ObjectType(INTERCEPTOR_CLASS),
  +                    GETFIELD));
  +            il.append(new ALOAD(0));
  +            il.append(new ALOAD(argArray));
  +            il.append(new INVOKESTATIC(addAfterConstructionRef(cp)));
  +            il.append(new RETURN());
               costructor.setMaxStack();
               costructor.setMaxLocals();
  -            cg.addMethod( costructor.getMethod() );
  +            cg.addMethod(costructor.getMethod());
           }
       }
  -    
  -    private static void addConstructor(ClassGen  cg ){
  -        
  +    private static void addConstructor(ClassGen cg) {
           String parentClass = cg.getSuperclassName();
           InstructionFactory factory = new InstructionFactory(cg);
           ConstantPoolGen cp = cg.getConstantPool(); // cg creates constant pool
           InstructionList il = new InstructionList();
  -        MethodGen costructor  = new MethodGen(ACC_PUBLIC,// access flags
  -        Type.VOID,// return type
  -        new Type[] {            // argument types
  -            new ObjectType(INTERCEPTOR_CLASS)
  -        }, null, // arg names
  +            MethodGen costructor = new MethodGen(ACC_PUBLIC, // access flags
  +        Type.VOID, // return type
  +    new Type[] { // argument types
  +            new ObjectType(INTERCEPTOR_CLASS)}, null, // arg names
           CONSTRUCTOR_NAME, cg.getClassName(), il, cp);
  -        
  -        il.append( new ALOAD(0));
  -        il.append( factory.createInvoke(parentClass,CONSTRUCTOR_NAME,Type.VOID ,new Type[]{}, INVOKESPECIAL ));
  -        il.append( new ALOAD(0));
  -        il.append( new ALOAD(1));
  -        il.append( factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),PUTFIELD));
  -        Type argTypes[] = new Type[]{ new ObjectType(INTERCEPTOR_CLASS) };
  -        int argArray = createArgArray(il,factory,cp,argTypes);
  -        il.append( new ASTORE( argArray ));
  -        il.append( new ALOAD(0) );
  -        il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),GETFIELD));
  -        il.append( new ALOAD(0) );
  -        il.append( new ALOAD( argArray  ) );  
  -        il.append( new INVOKESTATIC( addAfterConstructionRef(cp) ));
  -        il.append( new RETURN() );
  -      
  -        cg.addMethod( getMethod( costructor ) );
  -        
  +        il.append(new ALOAD(0));
  +        il.append(
  +            factory.createInvoke(
  +                parentClass,
  +                CONSTRUCTOR_NAME,
  +                Type.VOID,
  +                new Type[] {},
  +                INVOKESPECIAL));
  +        il.append(new ALOAD(0));
  +        il.append(new ALOAD(1));
  +        il.append(
  +            factory.createFieldAccess(
  +                cg.getClassName(),
  +                FIELD_NAME,
  +                new ObjectType(INTERCEPTOR_CLASS),
  +                PUTFIELD));
  +        Type argTypes[] = new Type[] { new ObjectType(INTERCEPTOR_CLASS)};
  +        int argArray = createArgArray(il, factory, cp, argTypes);
  +        il.append(new ASTORE(argArray));
  +        il.append(new ALOAD(0));
  +        il.append(
  +            factory.createFieldAccess(
  +                cg.getClassName(),
  +                FIELD_NAME,
  +                new ObjectType(INTERCEPTOR_CLASS),
  +                GETFIELD));
  +        il.append(new ALOAD(0));
  +        il.append(new ALOAD(argArray));
  +        il.append(new INVOKESTATIC(addAfterConstructionRef(cp)));
  +        il.append(new RETURN());
  +        cg.addMethod(getMethod(costructor));
       }
  -    private static void addHandlerField(ClassGen  cg){
  -        
  +    private static void addHandlerField(ClassGen cg) {
           ConstantPoolGen cp = cg.getConstantPool();
  -        FieldGen fg = new FieldGen( ACC_PUBLIC ,
  -        new ObjectType(INTERCEPTOR_CLASS) ,
  -        FIELD_NAME , cp);
  +        FieldGen fg =
  +            new FieldGen(ACC_PUBLIC, new ObjectType(INTERCEPTOR_CLASS), FIELD_NAME, cp);
           cg.addField(fg.getField());
  -        
       }
  -    
  -    private static ClassGen getClassGen( String class_name, Class  parentClass,Class [] interfaces){
  -        
  -        ClassGen gen = new ClassGen( class_name , parentClass.getName(),
  -        SOURCE_FILE, ACC_PUBLIC , null );
  -        if( interfaces != null ){
  -            for(int i = 0; i< interfaces.length; i++ ){
  +    private static ClassGen getClassGen(
  +        String class_name,
  +        Class parentClass,
  +        Class[] interfaces) {
  +        ClassGen gen =
  +            new ClassGen(class_name, parentClass.getName(), SOURCE_FILE, ACC_PUBLIC, null);
  +        if (interfaces != null) {
  +            for (int i = 0; i < interfaces.length; i++) {
                   gen.addInterface(interfaces[i].getName());
               }
           }
  -        
           return gen;
       }
  -    
  -    private static JavaClass enhance( Class parentClass,String class_name,Class interfaces [],java.util.HashMap methodTable ) throws Throwable {
  -        
  -        ClassGen  cg = getClassGen(class_name,parentClass,interfaces);
  +    private static JavaClass enhance(
  +        Class parentClass,
  +        String class_name,
  +        Class interfaces[],
  +        java.util.HashMap methodTable)
  +        throws Throwable {
  +        ClassGen cg = getClassGen(class_name, parentClass, interfaces);
           ConstantPoolGen cp = cg.getConstantPool(); // cg creates constant pool
           addHandlerField(cg);
  -        addConstructors(cg,parentClass);
  -        
  -        int before =  addBeforeRef(cp);
  -        int after  =  addAfterRef(cp);
  -        int invokeSuper  = addInvokeSupperRef(cp);
  +        addConstructors(cg, parentClass);
  +        int before = addBeforeRef(cp);
  +        int after = addAfterRef(cp);
  +        int invokeSuper = addInvokeSupperRef(cp);
           java.util.Set methodSet = new java.util.HashSet();
           
  -        for(int j = (interfaces == null ? 0 : interfaces.length); j == 0 ; j--  ) {
  -            java.lang.reflect.Method  methods[];
  -            if( j == 0 ){
  +        for (int j = (interfaces == null ? 0 : interfaces.length); j >= 0; j--) {
  +            java.lang.reflect.Method methods[];
  +            if (j == 0) {
                   methods = parentClass.getMethods();
  -            }else{
  +            } else {
                   methods = interfaces[j - 1].getMethods();
               }
  -            for( int i = 0 ; i < methods.length; i++ ){
  +            for (int i = 0; i < methods.length; i++) {
                   int mod = methods[i].getModifiers();
  -                if( !java.lang.reflect.Modifier.isStatic(mod) &&
  -                !java.lang.reflect.Modifier.isFinal(mod) &&
  -                (java.lang.reflect.Modifier.isPublic(mod)||
  -                java.lang.reflect.Modifier.isProtected(mod)) ){
  -                    methodSet.add( new  MethodWrapper( methods[i] ) );
  -                    
  +                if (!java.lang.reflect.Modifier.isStatic(mod)
  +                    && !java.lang.reflect.Modifier.isFinal(mod)
  +                    && (java.lang.reflect.Modifier.isPublic(mod)
  +                        || java.lang.reflect.Modifier.isProtected(mod))) {
  +                       
  +                    methodSet.add(new MethodWrapper(methods[i]));
  +                    if( DEBUG ){
  +                     System.out.println("added:" + methods[i]);     
  +                    }
                   }
               }
           }
           int cntr = 0;
  -        for( java.util.Iterator i = methodSet.iterator(); i.hasNext();  ){
  -            java.lang.reflect.Method method  = ((MethodWrapper)i.next()).method;
  +        for (java.util.Iterator i = methodSet.iterator(); i.hasNext();) {
  +            java.lang.reflect.Method method = ((MethodWrapper) i.next()).method;
               String fieldName = "METHOD_" + (cntr++);
  -            cg.addMethod( generateMethod( method,fieldName,cg, before,after,invokeSuper ) );
  -            methodTable.put(fieldName,method);
  +            cg.addMethod(generateMethod(method, fieldName, cg, before, after, invokeSuper));
  +            methodTable.put(fieldName, method);
           }
           JavaClass jcl = cg.getJavaClass();
  -        return  jcl;
  +        return jcl;
       }
  -    
  -    
  -    private static void addMethodField(String fieldName, ClassGen cg ){
  -        
  +    private static void addMethodField(String fieldName, ClassGen cg) {
           ConstantPoolGen cp = cg.getConstantPool();
  -        FieldGen fg = new FieldGen( ACC_PUBLIC | ACC_STATIC  , METHOD_OBJECT , fieldName , cp);
  +        FieldGen fg =
  +            new FieldGen(ACC_PUBLIC | ACC_STATIC, METHOD_OBJECT, fieldName, cp);
           cg.addField(fg.getField());
  -        
       }
  -    
  -    private static int createArgArray(InstructionList    il, InstructionFactory factory, ConstantPoolGen cp, Type[] args ){
  -        
  +    private static int createArgArray(
  +        InstructionList il,
  +        InstructionFactory factory,
  +        ConstantPoolGen cp,
  +        Type[] args) {
           int argCount = args.length;
  -        if( argCount > 5 )
  -            il.append( new  BIPUSH((byte)argCount) );
  -        else il.append( new  ICONST((byte)argCount) );
  -        il.append( new ANEWARRAY( cp.addClass( Type.OBJECT )) );
  +        if (argCount > 5)
  +            il.append(new BIPUSH((byte) argCount));
  +        else
  +            il.append(new ICONST((byte) argCount));
  +        il.append(new ANEWARRAY(cp.addClass(Type.OBJECT)));
           int load = 1;
  -        for(int i = 0; i< argCount; i++) {
  -            
  -            il.append( new DUP() );
  -            if( i > 5 )
  -                il.append( new BIPUSH( (byte) i ) );
  -            else il.append( new ICONST( (byte) i ) );
  -            if ( args[i] instanceof BasicType  ){
  -                if ( args[i].equals( Type.BOOLEAN )  ){
  -                    il.append( new NEW( cp.addClass( BOOLEAN_OBJECT ) ) );
  -                    il.append( new DUP() );
  -                    il.append( new ILOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Boolean.class.getName(),CONSTRUCTOR_NAME, "(Z)V")) );
  -                }else  if ( args[i].equals( Type.INT )  ){
  -                    il.append( new NEW( cp.addClass( INTEGER_OBJECT ) ) );
  -                    il.append( new DUP() );
  -                    il.append( new ILOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Integer.class.getName(),CONSTRUCTOR_NAME, "(I)V")) );
  -                }else  if ( args[i].equals( Type.CHAR )  ){
  -                    il.append( new NEW( cp.addClass( CHARACTER_OBJECT ) ) );
  -                    il.append( new DUP() );
  -                    il.append( new ILOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Character.class.getName(),CONSTRUCTOR_NAME, "(C)V")) );
  -                }else  if ( args[i].equals( Type.BYTE )  ){
  -                    il.append( new NEW( cp.addClass( BYTE_OBJECT ) ) );
  -                    il.append( new DUP() );
  -                    il.append( new ILOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Byte.class.getName(),CONSTRUCTOR_NAME, "(B)V")) );
  -                }else  if ( args[i].equals( Type.SHORT )  ){
  -                    il.append( new NEW( cp.addClass( SHORT_OBJECT ) ));
  -                    il.append( new DUP() );
  -                    il.append( new ILOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Short.class.getName(),CONSTRUCTOR_NAME, "(S)V")) );
  -                }else  if ( args[i].equals( Type.LONG )  ){
  -                    il.append( new NEW( cp.addClass( LONG_OBJECT ) ));
  -                    il.append( new DUP() );
  -                    il.append( new LLOAD( load  ) );
  +        for (int i = 0; i < argCount; i++) {
  +            il.append(new DUP());
  +            if (i > 5)
  +                il.append(new BIPUSH((byte) i));
  +            else
  +                il.append(new ICONST((byte) i));
  +            if (args[i] instanceof BasicType) {
  +                if (args[i].equals(Type.BOOLEAN)) {
  +                    il.append(new NEW(cp.addClass(BOOLEAN_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new ILOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Boolean.class.getName(), CONSTRUCTOR_NAME, "(Z)V")));
  +                } else if (args[i].equals(Type.INT)) {
  +                    il.append(new NEW(cp.addClass(INTEGER_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new ILOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Integer.class.getName(), CONSTRUCTOR_NAME, "(I)V")));
  +                } else if (args[i].equals(Type.CHAR)) {
  +                    il.append(new NEW(cp.addClass(CHARACTER_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new ILOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Character.class.getName(), CONSTRUCTOR_NAME, "(C)V")));
  +                } else if (args[i].equals(Type.BYTE)) {
  +                    il.append(new NEW(cp.addClass(BYTE_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new ILOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Byte.class.getName(), CONSTRUCTOR_NAME, "(B)V")));
  +                } else if (args[i].equals(Type.SHORT)) {
  +                    il.append(new NEW(cp.addClass(SHORT_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new ILOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Short.class.getName(), CONSTRUCTOR_NAME, "(S)V")));
  +                } else if (args[i].equals(Type.LONG)) {
  +                    il.append(new NEW(cp.addClass(LONG_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new LLOAD(load));
                       load += 2;
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Long.class.getName(),CONSTRUCTOR_NAME, "(J)V")) );
  -                }else  if ( args[i].equals( Type.DOUBLE )  ){
  -                    il.append( new NEW( cp.addClass( DOUBLE_OBJECT ) ) );
  -                    il.append( new DUP() );
  -                    il.append( new DLOAD( load  ) );
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Long.class.getName(), CONSTRUCTOR_NAME, "(J)V")));
  +                } else if (args[i].equals(Type.DOUBLE)) {
  +                    il.append(new NEW(cp.addClass(DOUBLE_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new DLOAD(load));
                       load += 2;
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Double.class.getName(),CONSTRUCTOR_NAME, "(D)V")) );
  -                }else  if ( args[i].equals( Type.FLOAT )  ){
  -                    il.append( new NEW( cp.addClass( FLOAT_OBJECT ) ));
  -                    il.append( new DUP() );
  -                    il.append( new FLOAD( load++ ) );
  -                    il.append( new INVOKESPECIAL(cp.addMethodref(Float.class.getName(),CONSTRUCTOR_NAME, "(F)V")) );
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Double.class.getName(), CONSTRUCTOR_NAME, "(D)V")));
  +                } else if (args[i].equals(Type.FLOAT)) {
  +                    il.append(new NEW(cp.addClass(FLOAT_OBJECT)));
  +                    il.append(new DUP());
  +                    il.append(new FLOAD(load++));
  +                    il.append(
  +                        new INVOKESPECIAL(
  +                            cp.addMethodref(Float.class.getName(), CONSTRUCTOR_NAME, "(F)V")));
                   }
  -                
  -                il.append( new AASTORE() );
  -                
  -            }else{
  -                il.append( new ALOAD( load++ ) );
  -                il.append( new AASTORE() );
  +                il.append(new AASTORE());
  +            } else {
  +                il.append(new ALOAD(load++));
  +                il.append(new AASTORE());
               }
           }
           return load;
       }
  -    private static  Method getMethod(MethodGen mg){
  +    private static Method getMethod(MethodGen mg) {
           mg.stripAttributes(true);
           mg.setMaxLocals();
           mg.setMaxStack();
           return mg.getMethod();
       }
  -    private static InstructionHandle generateReturnValue( InstructionList il, InstructionFactory factory, ConstantPoolGen cp, Type returnType, int stack ){
  -        
  -        if( returnType.equals(Type.VOID)){
  -            
  -            return il.append( new RETURN() );
  -            
  -        }
  -        il.append( new ASTORE( stack  ) );
  -        il.append( new ALOAD( stack  ) );
  -        if( returnType instanceof ObjectType ) {
  -            if(!returnType.equals(Type.OBJECT))
  -                il.append( new CHECKCAST( cp.addClass( (ObjectType)returnType ) ) );
  -            return il.append( new ARETURN() );
  -        }else if ( returnType instanceof BasicType  ){
  -            if ( returnType.equals( Type.BOOLEAN )  ){
  -                il.append( new CHECKCAST( cp.addClass( BOOLEAN_OBJECT ) ) );
  -                il.append( factory.createInvoke(Boolean.class.getName(),"booleanValue",
  -                Type.BOOLEAN,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return   il.append( new IRETURN());
  -            }else if (returnType.equals( Type.CHAR )){
  -                
  -                il.append( new CHECKCAST( cp.addClass( CHARACTER_OBJECT ) ) );
  -                il.append( factory.createInvoke(Character.class.getName(),"charValue",
  -                Type.CHAR,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return  il.append( new IRETURN());
  -            }else if (returnType.equals( Type.LONG )){
  -                
  -                il.append( new CHECKCAST( cp.addClass( NUMBER_OBJECT ) ) );
  -                il.append( factory.createInvoke(Number.class.getName(),"longValue",
  -                Type.LONG,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return il.append( new LRETURN());
  -            }else if (returnType.equals( Type.DOUBLE )){
  -                
  -                il.append( new CHECKCAST( cp.addClass( NUMBER_OBJECT ) ) );
  -                il.append( factory.createInvoke(Number.class.getName(),"doubleValue",
  -                Type.DOUBLE,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return il.append( new DRETURN());
  -            }else if (returnType.equals( Type.FLOAT )){
  -                
  -                il.append( new CHECKCAST( cp.addClass( NUMBER_OBJECT ) ) );
  -                il.append( factory.createInvoke(java.lang.Number.class.getName(),"floatValue",
  -                Type.FLOAT,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return   il.append( new FRETURN());
  -            }else {
  -                
  -                il.append( new CHECKCAST( cp.addClass( NUMBER_OBJECT ) ) );
  -                il.append( factory.createInvoke(Number.class.getName(),"intValue",
  -                Type.INT,new Type[]{},INVOKEVIRTUAL )
  -                );
  -                return il.append( new IRETURN());
  +    private static InstructionHandle generateReturnValue(
  +        InstructionList il,
  +        InstructionFactory factory,
  +        ConstantPoolGen cp,
  +        Type returnType,
  +        int stack) {
  +        if (returnType.equals(Type.VOID)) {
  +            return il.append(new RETURN());
  +        }
  +        il.append(new ASTORE(stack));
  +        il.append(new ALOAD(stack));
  +        if (returnType instanceof ObjectType) {
  +            if (!returnType.equals(Type.OBJECT))
  +                il.append(new CHECKCAST(cp.addClass((ObjectType) returnType)));
  +            return il.append(new ARETURN());
  +        } else if (returnType instanceof BasicType) {
  +            if (returnType.equals(Type.BOOLEAN)) {
  +                il.append(new CHECKCAST(cp.addClass(BOOLEAN_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        Boolean.class.getName(),
  +                        "booleanValue",
  +                        Type.BOOLEAN,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new IRETURN());
  +            } else if (returnType.equals(Type.CHAR)) {
  +                il.append(new CHECKCAST(cp.addClass(CHARACTER_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        Character.class.getName(),
  +                        "charValue",
  +                        Type.CHAR,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new IRETURN());
  +            } else if (returnType.equals(Type.LONG)) {
  +                il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        Number.class.getName(),
  +                        "longValue",
  +                        Type.LONG,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new LRETURN());
  +            } else if (returnType.equals(Type.DOUBLE)) {
  +                il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        Number.class.getName(),
  +                        "doubleValue",
  +                        Type.DOUBLE,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new DRETURN());
  +            } else if (returnType.equals(Type.FLOAT)) {
  +                il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        java.lang.Number.class.getName(),
  +                        "floatValue",
  +                        Type.FLOAT,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new FRETURN());
  +            } else {
  +                il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
  +                il.append(
  +                    factory.createInvoke(
  +                        Number.class.getName(),
  +                        "intValue",
  +                        Type.INT,
  +                        new Type[] {},
  +                        INVOKEVIRTUAL));
  +                return il.append(new IRETURN());
               }
  -            
           }
           return null;
       }
  -    private static Instruction newWrapper(Type type,ConstantPoolGen cp) {
  -        
  -        if ( type instanceof BasicType  ){
  -            if ( type.equals( Type.BOOLEAN )  ){
  -                return new NEW( cp.addClass( BOOLEAN_OBJECT  ) );
  -                
  -            }else  if ( type.equals( Type.INT )  ){
  -                return new NEW( cp.addClass( INTEGER_OBJECT  ) );
  -                
  -            }else  if ( type.equals( Type.CHAR )  ){
  -                return new NEW( cp.addClass( CHARACTER_OBJECT  ) );
  -            }else  if ( type.equals( Type.BYTE )  ){
  -                return new NEW( cp.addClass( BYTE_OBJECT ));
  -                
  -            }else  if ( type.equals( Type.SHORT )  ){
  -                return new NEW( cp.addClass( SHORT_OBJECT ));
  -            }else  if ( type.equals( Type.LONG )  ){
  -                return new NEW( cp.addClass( LONG_OBJECT  ));
  -            }else  if ( type.equals( Type.DOUBLE )  ){
  -                return new NEW( cp.addClass( DOUBLE_OBJECT  ) );
  -                
  -            }else  if ( type.equals( Type.FLOAT )  ){
  -                return new NEW( cp.addClass( FLOAT_OBJECT ) );
  +    private static Instruction newWrapper(Type type, ConstantPoolGen cp) {
  +        if (type instanceof BasicType) {
  +            if (type.equals(Type.BOOLEAN)) {
  +                return new NEW(cp.addClass(BOOLEAN_OBJECT));
  +            } else if (type.equals(Type.INT)) {
  +                return new NEW(cp.addClass(INTEGER_OBJECT));
  +            } else if (type.equals(Type.CHAR)) {
  +                return new NEW(cp.addClass(CHARACTER_OBJECT));
  +            } else if (type.equals(Type.BYTE)) {
  +                return new NEW(cp.addClass(BYTE_OBJECT));
  +            } else if (type.equals(Type.SHORT)) {
  +                return new NEW(cp.addClass(SHORT_OBJECT));
  +            } else if (type.equals(Type.LONG)) {
  +                return new NEW(cp.addClass(LONG_OBJECT));
  +            } else if (type.equals(Type.DOUBLE)) {
  +                return new NEW(cp.addClass(DOUBLE_OBJECT));
  +            } else if (type.equals(Type.FLOAT)) {
  +                return new NEW(cp.addClass(FLOAT_OBJECT));
               }
           }
  -        
           return null;
  -        
       }
  -    
  -    private static Instruction initWrapper(Type type,ConstantPoolGen cp){
  -        
  -        if ( type instanceof BasicType  ){
  -            if ( type.equals( Type.BOOLEAN )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Boolean.class.getName(),CONSTRUCTOR_NAME, "(Z)V"));
  -            }else  if ( type.equals( Type.INT )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Integer.class.getName(),CONSTRUCTOR_NAME, "(I)V"));
  -            }else  if ( type.equals( Type.CHAR )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Character.class.getName(),CONSTRUCTOR_NAME, "(C)V"));
  -            }else  if ( type.equals( Type.BYTE )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Byte.class.getName(),CONSTRUCTOR_NAME, "(B)V") );
  -            }else  if ( type.equals( Type.SHORT )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Short.class.getName(),CONSTRUCTOR_NAME, "(S)V") );
  -            }else  if ( type.equals( Type.LONG )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Long.class.getName(),CONSTRUCTOR_NAME, "(J)V")) ;
  -            }else  if ( type.equals( Type.DOUBLE )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Double.class.getName(),CONSTRUCTOR_NAME, "(D)V") );
  -            }else  if ( type.equals( Type.FLOAT )  ){
  -                return new INVOKESPECIAL(cp.addMethodref(Float.class.getName(),CONSTRUCTOR_NAME, "(F)V")) ;
  +    private static Instruction initWrapper(Type type, ConstantPoolGen cp) {
  +        if (type instanceof BasicType) {
  +            if (type.equals(Type.BOOLEAN)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Boolean.class.getName(), CONSTRUCTOR_NAME, "(Z)V"));
  +            } else if (type.equals(Type.INT)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Integer.class.getName(), CONSTRUCTOR_NAME, "(I)V"));
  +            } else if (type.equals(Type.CHAR)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Character.class.getName(), CONSTRUCTOR_NAME, "(C)V"));
  +            } else if (type.equals(Type.BYTE)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Byte.class.getName(), CONSTRUCTOR_NAME, "(B)V"));
  +            } else if (type.equals(Type.SHORT)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Short.class.getName(), CONSTRUCTOR_NAME, "(S)V"));
  +            } else if (type.equals(Type.LONG)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Long.class.getName(), CONSTRUCTOR_NAME, "(J)V"));
  +            } else if (type.equals(Type.DOUBLE)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Double.class.getName(), CONSTRUCTOR_NAME, "(D)V"));
  +            } else if (type.equals(Type.FLOAT)) {
  +                return new INVOKESPECIAL(
  +                    cp.addMethodref(Float.class.getName(), CONSTRUCTOR_NAME, "(F)V"));
               }
           }
  -        
           return null;
       }
  -    private static int loadArg(InstructionList il, Type t, int index,int pos ){
  -        
  -        if( t instanceof BasicType ){
  -            
  -            if( t.equals( Type.LONG )) {
  -                il.append(new LLOAD( pos ));
  +    private static int loadArg(InstructionList il, Type t, int index, int pos) {
  +        if (t instanceof BasicType) {
  +            if (t.equals(Type.LONG)) {
  +                il.append(new LLOAD(pos));
                   pos += 2;
                   return pos;
  -            }else if( t.equals( Type.DOUBLE )){
  -                il.append(new DLOAD( pos ));
  +            } else if (t.equals(Type.DOUBLE)) {
  +                il.append(new DLOAD(pos));
                   pos += 2;
                   return pos;
  -            }else if (t.equals( Type.FLOAT )) {
  -                il.append(new FLOAD( pos ));
  +            } else if (t.equals(Type.FLOAT)) {
  +                il.append(new FLOAD(pos));
                   return ++pos;
  -            }else {
  -                il.append(new ILOAD( pos ));
  +            } else {
  +                il.append(new ILOAD(pos));
                   return ++pos;
               }
  -        }else{
  +        } else {
               il.append(new ALOAD(pos));
               return ++pos;
           }
  -        
       }
  -    
  -    private static Type[] toType(Class cls[]){
  -        
  -        Type tp []= new Type[ cls.length ];
  -        for(int i = 0; i < cls.length; i++ ){
  +    private static Type[] toType(Class cls[]) {
  +        Type tp[] = new Type[cls.length];
  +        for (int i = 0; i < cls.length; i++) {
               tp[i] = toType(cls[i]);
           }
           return tp;
       }
  -    
  -    private static Type toType(Class cls){
  -        
  -        if(cls.equals(void.class)){
  +    private static Type toType(Class cls) {
  +        if (cls.equals(void.class)) {
               return Type.VOID;
           }
  -        
  -        if(cls.isPrimitive()){
  -            
  -            if( int.class.equals(cls) ){
  +        if (cls.isPrimitive()) {
  +            if (int.class.equals(cls)) {
                   return Type.INT;
  -            }else if( char.class.equals(cls) ){
  +            } else if (char.class.equals(cls)) {
                   return Type.CHAR;
  -            }else if( short.class.equals(cls) ){
  +            } else if (short.class.equals(cls)) {
                   return Type.SHORT;
  -            }else if( byte.class.equals(cls) ){
  +            } else if (byte.class.equals(cls)) {
                   return Type.BYTE;
  -            }else if( long.class.equals(cls)){
  +            } else if (long.class.equals(cls)) {
                   return Type.LONG;
  -            }else if (float.class.equals(cls)){
  +            } else if (float.class.equals(cls)) {
                   return Type.FLOAT;
  -            }else if (double.class.equals(cls)){
  +            } else if (double.class.equals(cls)) {
                   return Type.DOUBLE;
  -            }else if (boolean.class.equals(cls)){
  +            } else if (boolean.class.equals(cls)) {
                   return Type.BOOLEAN;
               }
  -            
  -        }else if (cls.isArray()){
  -            
  +        } else if (cls.isArray()) {
               return toType(cls.getComponentType());
  -            
  -        }else return new ObjectType(cls.getName());
  +        } else
  +            return new ObjectType(cls.getName());
           throw new java.lang.InternalError(cls.getName());
       }
  -    
  -    private static void invokeSuper(ClassGen cg, MethodGen mg,  Type args[]){
  +    private static void invokeSuper(ClassGen cg, MethodGen mg, Type args[]) {
           ConstantPoolGen cp = cg.getConstantPool();
           InstructionList il = mg.getInstructionList();
           int pos = 1;
  -        il.append(new ALOAD(0) );//this
  -        for( int i = 0; i < args.length; i++ ){//load args to stack
  -            pos = loadArg(il,args[i] , i, pos ) ;
  -        }
  -        il.append( new INVOKESPECIAL( cp.addMethodref(cg.getSuperclassName(),
  -        mg.getName(),mg.getSignature() ) ) );
  -    }
  -    
  -    private static MethodGen toMethodGen( java.lang.reflect.Method mtd,String className,
  -    InstructionList il ,ConstantPoolGen cp){
  -        return new MethodGen(ACC_PUBLIC, toType( mtd.getReturnType() ) , toType(mtd.getParameterTypes()) ,
  -        null, mtd.getName(), className ,  il, cp);
  -    }
  -    private static MethodGen toMethodGen( java.lang.reflect.Constructor mtd,String className,
  -    InstructionList il ,ConstantPoolGen cp){
  -        return new MethodGen(ACC_PUBLIC, Type.VOID , toType(mtd.getParameterTypes()),
  -        null, CONSTRUCTOR_NAME , className,  il, cp );
  -    }
  -    
  -    
  -    private static  Method  generateMethod( java.lang.reflect.Method method,
  -    String fieldName,
  -    ClassGen cg,int before,
  -    int after, int invokeSuper){
  -        
  -        InstructionList    il      = new InstructionList();
  +        il.append(new ALOAD(0)); //this
  +        for (int i = 0; i < args.length; i++) { //load args to stack
  +            pos = loadArg(il, args[i], i, pos);
  +        }
  +        il.append(
  +            new INVOKESPECIAL(
  +                cp.addMethodref(cg.getSuperclassName(), mg.getName(), mg.getSignature())));
  +    }
  +    private static MethodGen toMethodGen(
  +        java.lang.reflect.Method mtd,
  +        String className,
  +        InstructionList il,
  +        ConstantPoolGen cp) {
  +        return new MethodGen(
  +            ACC_PUBLIC,
  +            toType(mtd.getReturnType()),
  +            toType(mtd.getParameterTypes()),
  +            null,
  +            mtd.getName(),
  +            className,
  +            il,
  +            cp);
  +    }
  +    private static MethodGen toMethodGen(
  +        java.lang.reflect.Constructor mtd,
  +        String className,
  +        InstructionList il,
  +        ConstantPoolGen cp) {
  +        return new MethodGen(
  +            ACC_PUBLIC,
  +            Type.VOID,
  +            toType(mtd.getParameterTypes()),
  +            null,
  +            CONSTRUCTOR_NAME,
  +            className,
  +            il,
  +            cp);
  +    }
  +    private static Method generateMethod(
  +        java.lang.reflect.Method method,
  +        String fieldName,
  +        ClassGen cg,
  +        int before,
  +        int after,
  +        int invokeSuper) {
  +            
  +        InstructionList il = new InstructionList();
           InstructionFactory factory = new InstructionFactory(cg);
           ConstantPoolGen cp = cg.getConstantPool();
  -        MethodGen mg = toMethodGen(method, cg.getClassName(),il, cp);
  +        MethodGen mg = toMethodGen(method, cg.getClassName(), il, cp);
           Type types[] = mg.getArgumentTypes();
           int argCount = types.length;
  -        
  -        addMethodField( fieldName, cg );
  -        
  -        boolean returnsValue = !mg.getReturnType().equals( Type.VOID );
  -        boolean abstractM    = java.lang.reflect.Modifier.isAbstract(method.getModifiers());
  +        addMethodField(fieldName, cg);
  +        boolean returnsValue = !mg.getReturnType().equals(Type.VOID);
  +        boolean abstractM =
  +            java.lang.reflect.Modifier.isAbstract(method.getModifiers());
           InstructionHandle ehEnd = null;
           GOTO gotoHandled = null;
           IFEQ ifInvoke = null;
           InstructionHandle condition = null;
           InstructionHandle ehHandled = null;
           InstructionHandle ehStart = null;
  -        
           InstructionHandle start = il.getStart();
  -        
  -        int loaded = createArgArray(il,factory,cp,mg.getArgumentTypes());
  +        int loaded = createArgArray(il, factory, cp, mg.getArgumentTypes());
           int argArray = loaded;
  -        int resutFromBefore = ++loaded ;
  -        
  -        il.append( new ASTORE(argArray) );
  -        if(!abstractM){// invoke before
  -            il.append( new ALOAD(0) );
  -            il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),GETFIELD));
  -            il.append( new ALOAD(0) );
  -            il.append( factory.createGetStatic(cg.getClassName(),fieldName, METHOD_OBJECT ) );
  -            il.append( new ALOAD( argArray  ) );
  -            il.append( new INVOKEINTERFACE(before,4) );
  -            il.append( new ASTORE( resutFromBefore ) );
  -            
  -        }else {
  -            il.append( new ACONST_NULL() );
  -            il.append( new ASTORE( resutFromBefore ) );
  +        int resutFromBefore = ++loaded;
  +        il.append(new ASTORE(argArray));
  +        if (!abstractM) { // invoke before
  +            il.append(new ALOAD(0));
  +            il.append(
  +                factory.createFieldAccess(
  +                    cg.getClassName(),
  +                    FIELD_NAME,
  +                    new ObjectType(INTERCEPTOR_CLASS),
  +                    GETFIELD));
  +            il.append(new ALOAD(0));
  +            il.append(factory.createGetStatic(cg.getClassName(), fieldName, METHOD_OBJECT));
  +            il.append(new ALOAD(argArray));
  +            il.append(new INVOKEINTERFACE(before, 4));
  +            il.append(new ASTORE(resutFromBefore));
  +        } else {
  +            il.append(new ACONST_NULL());
  +            il.append(new ASTORE(resutFromBefore));
           }
           //locals
  -        il.append( new ACONST_NULL() );
  +        il.append(new ACONST_NULL());
           int resultFromSuper = ++loaded;
  -        il.append( new ASTORE( resultFromSuper ) );
  -        il.append( new ICONST(0) );
  +        il.append(new ASTORE(resultFromSuper));
  +        il.append(new ICONST(0));
           int superInvoked = ++loaded;
  -        il.append( new ISTORE( superInvoked ) );
  -        il.append( new ACONST_NULL() );
  +        il.append(new ISTORE(superInvoked));
  +        il.append(new ACONST_NULL());
           int error = ++loaded;
  -        il.append( new ASTORE( error  ) );
  -        if(!abstractM){//test before invoke super
  -            il.append( new ALOAD(0) );//this.handler
  -            il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),GETFIELD));
  -            il.append( new ALOAD(0) );//this
  -            il.append( factory.createGetStatic(cg.getClassName(),fieldName, METHOD_OBJECT ) );
  -            il.append( new ALOAD(argArray) );
  -            il.append( new ALOAD(resutFromBefore) );
  -            il.append( new INVOKEINTERFACE(invokeSuper,5) );
  +        il.append(new ASTORE(error));
  +        if (!abstractM) { //test before invoke super
  +            il.append(new ALOAD(0)); //this.handler
  +            il.append(
  +                factory.createFieldAccess(
  +                    cg.getClassName(),
  +                    FIELD_NAME,
  +                    new ObjectType(INTERCEPTOR_CLASS),
  +                    GETFIELD));
  +            il.append(new ALOAD(0)); //this
  +            il.append(factory.createGetStatic(cg.getClassName(), fieldName, METHOD_OBJECT));
  +            il.append(new ALOAD(argArray));
  +            il.append(new ALOAD(resutFromBefore));
  +            il.append(new INVOKEINTERFACE(invokeSuper, 5));
               //test returned true
               ifInvoke = new IFEQ(null);
  -            condition = il.append( ifInvoke );
  -            il.append( new ICONST(1));
  -            ehStart = il.append( new ISTORE( superInvoked ) );// Ivoked = true
  -            Instruction wrapper = newWrapper( mg.getReturnType(),cp );
  -            if( wrapper != null ){
  -                ehStart = il.append( wrapper );
  -                il.append( new DUP() );
  -            }
  -            //invokeSuper
  -            /*
  -            int pos = 1;
  -            il.append(new ALOAD(0) );//this
  -            for( int i = 0; i < argCount; i++ ){//load args to stack
  -                pos = loadArg(il,types[i] , i, pos ) ;
  -            }
  -            il.append( new INVOKESPECIAL( cp.addMethodref(cg.getSuperclassName(),
  -            method.getName(),mg.getSignature() ) ) );
  -             */
  -            invokeSuper(cg,mg,types);
  -            if( wrapper != null ){
  -                il.append( initWrapper(mg.getReturnType(),cp) );
  +            condition = il.append(ifInvoke);
  +            il.append(new ICONST(1));
  +            ehStart = il.append(new ISTORE(superInvoked)); // Ivoked = true
  +            Instruction wrapper = newWrapper(mg.getReturnType(), cp);
  +            if (wrapper != null) {
  +                ehStart = il.append(wrapper);
  +                il.append(new DUP());
               }
  -            if( returnsValue ){
  -                ehEnd = il.append( new ASTORE(resultFromSuper) );
  +            
  +            invokeSuper(cg, mg, types);
  +            if (wrapper != null) {
  +                il.append(initWrapper(mg.getReturnType(), cp));
  +            }
  +            if (returnsValue) {
  +                ehEnd = il.append(new ASTORE(resultFromSuper));
               }
               gotoHandled = new GOTO(null);
  -            if(!returnsValue ){
  -                ehEnd = il.append( gotoHandled );
  -            }else{
  -                il.append( gotoHandled );
  +            if (!returnsValue) {
  +                ehEnd = il.append(gotoHandled);
  +            } else {
  +                il.append(gotoHandled);
               }
  -            ehHandled =  il.append( new ASTORE(error ) );
  +            ehHandled = il.append(new ASTORE(error));
           }
  -        
  -        InstructionHandle endif = il.append( new ALOAD(0) );//this
  -        
  -        if( !abstractM ){
  +        InstructionHandle endif = il.append(new ALOAD(0)); //this
  +        if (!abstractM) {
               ifInvoke.setTarget(endif);
               gotoHandled.setTarget(endif);
           }
  -        
  -        il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new ObjectType(INTERCEPTOR_CLASS),GETFIELD));
  -        il.append( new ALOAD(0) );//this
  -        il.append( factory.createGetStatic(cg.getClassName(),fieldName,METHOD_OBJECT ) );
  -        il.append( new ALOAD(argArray) );
  -        il.append( new ALOAD(resutFromBefore) );
  -        il.append( new ILOAD(superInvoked) );
  -        il.append( new ALOAD(resultFromSuper) );
  -        il.append( new ALOAD(error) );
  -        il.append( new INVOKEINTERFACE(after,8) );
  -        
  -        InstructionHandle exitMethod =  generateReturnValue(il,factory,cp,mg.getReturnType(),++loaded);
  -        
  -        if( !abstractM ){
  -            mg.addExceptionHandler(ehStart,ehEnd,ehHandled,Type.THROWABLE);
  +        il.append(
  +            factory.createFieldAccess(
  +                cg.getClassName(),
  +                FIELD_NAME,
  +                new ObjectType(INTERCEPTOR_CLASS),
  +                GETFIELD));
  +        il.append(new ALOAD(0)); //this
  +        il.append(factory.createGetStatic(cg.getClassName(), fieldName, METHOD_OBJECT));
  +        il.append(new ALOAD(argArray));
  +        il.append(new ALOAD(resutFromBefore));
  +        il.append(new ILOAD(superInvoked));
  +        il.append(new ALOAD(resultFromSuper));
  +        il.append(new ALOAD(error));
  +        il.append(new INVOKEINTERFACE(after, 8));
  +        InstructionHandle exitMethod =
  +            generateReturnValue(il, factory, cp, mg.getReturnType(), ++loaded);
  +        if (!abstractM) {
  +            mg.addExceptionHandler(ehStart, ehEnd, ehHandled, Type.THROWABLE);
           }
  -        
           mg.setMaxStack();
           mg.setMaxLocals();
           Method result = getMethod(mg);
  -        if( DEBUG ){
  +        if (DEBUG) {
               System.err.println(mg.getMethod());
               System.err.println(mg.getMethod().getCode());
               System.err.flush();
           }
  -        
           return result;
       }
  -    
  -    static class MethodWrapper{
  +    static class MethodWrapper {
           java.lang.reflect.Method method;
  -        MethodWrapper(java.lang.reflect.Method method){
  -            if( method == null ){
  +        MethodWrapper(java.lang.reflect.Method method) {
  +            if (method == null) {
                   throw new NullPointerException();
               }
               this.method = method;
           }
  -        public  boolean equals(Object obj){
  -            if(obj == null || !( obj instanceof java.lang.reflect.Method) ){
  +        public boolean equals(Object obj) {
  +            if (obj == null || !(obj instanceof java.lang.reflect.Method)) {
                   return false;
               }
  -            return equalsForEnhancer(method,(java.lang.reflect.Method)obj);
  +            return equalsForEnhancer(method, (java.lang.reflect.Method) obj);
           }
  -        public  int hashCode(){
  +        public int hashCode() {
               return method.hashCode();
           }
       }
  -    static  boolean equalsForEnhancer(java.lang.reflect.Method m1,java.lang.reflect.Method m2 ) {
  -        if( m1 == m2 ){
  +    static boolean equalsForEnhancer(
  +        java.lang.reflect.Method m1,
  +        java.lang.reflect.Method m2) {
  +        if (m1 == m2) {
               return true;
           }
  -        if( m1.getName().equals(m2.getName()) ){
  +        if (m1.getName().equals(m2.getName())) {
               Class[] params1 = m1.getParameterTypes();
               Class[] params2 = m2.getParameterTypes();
               if (params1.length == params2.length) {
                   for (int i = 0; i < params1.length; i++) {
  -                    if ( params1[i] != params2[i] ){
  +                    if (params1[i] != params2[i]) {
                           return false;
                       }
                   }
                   return true;
               }
           }
  -        
           return false;
       }
  -    
  -}
  +}
  \ No newline at end of file
  
  
  
  1.6       +12 -12    jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestEnhancer.java
  
  Index: TestEnhancer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestEnhancer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestEnhancer.java	7 Mar 2002 22:02:23 -0000	1.5
  +++ TestEnhancer.java	9 Mar 2002 19:07:49 -0000	1.6
  @@ -64,7 +64,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: TestEnhancer.java,v 1.5 2002/03/07 22:02:23 baliuka Exp $
  + *@version    $Id: TestEnhancer.java,v 1.6 2002/03/09 19:07:49 baliuka Exp $
    */
   public class TestEnhancer  extends TestCase {
       
  @@ -109,8 +109,8 @@
               public Object beforeInvoke( Object obj,java.lang.reflect.Method method,
               Object args[] )
               throws java.lang.Throwable{
  -                System.err.print("beforeInvoke:" + method);
  -                printArgs(args);
  +      //          System.err.print("beforeInvoke:" + method);
  +       //         printArgs(args);
                   return null;
               }
               
  @@ -118,15 +118,15 @@
               Object args[], Object retValFromBefore )
               throws java.lang.Throwable{
                   
  -                System.err.print("invokeSuper:" + method);
  -                printArgs(args);
  +           //     System.err.print("invokeSuper:" + method);
  +             //   printArgs(args);
                   if( "remove".equals(method.getName()) ) return false;//owerride size
                   return true;//let super to call this
               }
               
               public void afterConstruction(Object obj,Object args[] ){
  -                System.err.print("costructed: " + obj);
  -                printArgs(args);
  +            //    System.err.print("costructed: " + obj);
  +              //  printArgs(args);
                 }
               
           public Object afterReturn(  Object obj,     java.lang.reflect.Method method,
  @@ -134,12 +134,12 @@
           boolean invokedSuper, Object retValFromSuper,
           java.lang.Throwable e )throws java.lang.Throwable{
               if( e != null ){
  -                System.err.println("Cauth Exeption from super " + obj.getClass().getSuperclass().getName());
  -                e.printStackTrace();
  -                System.err.println();
  +          //      System.err.println("Cauth Exeption from super " + obj.getClass().getSuperclass().getName());
  +            //    e.printStackTrace();
  +            //    System.err.println();
               }
  -            System.err.print("afterReturn:" + method + " returned:" + retValFromSuper);
  -            printArgs(args);
  +          //  System.err.print("afterReturn:" + method + " returned:" + retValFromSuper);
  +          //  printArgs(args);
               if( !invokedSuper )return new Boolean(false); //it was "remove"
               return retValFromSuper;//return the same as supper
           }
  
  
  
  1.9       +20 -18    jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java
  
  Index: TestSample.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TestSample.java	28 Feb 2002 18:28:41 -0000	1.8
  +++ TestSample.java	9 Mar 2002 19:07:49 -0000	1.9
  @@ -72,7 +72,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: TestSample.java,v 1.8 2002/02/28 18:28:41 baliuka Exp $
  + *@version    $Id: TestSample.java,v 1.9 2002/03/09 19:07:49 baliuka Exp $
    */
   public class TestSample extends TestCase {
       
  @@ -97,16 +97,17 @@
               Transaction transaction = pm.getTransaction();
               
               transaction.begin();
  -            TestPersistent object1 = (TestPersistent) pm.createInstance(TestPersistent.class);
  +            TestPersistentClassType object1 = (TestPersistentClassType) pm.createInstance(TestPersistentClassType.class);
               Object oid = pm.getOID(object1);
  +            object1.doSomething(object1.toString());
               transaction.commit();
  -            
  +           
               transaction.begin();
  -            TestPersistent object2 = (TestPersistent) pm.findInstance(TestPersistent.class, oid);
  +            TestPersistentClassType object2 = (TestPersistentClassType) pm.findInstance(TestPersistentClassType.class, oid);
               transaction.commit();
               
               transaction.begin();
  -            TestPersistent object3 = (TestPersistent) pm.createInstance(TestPersistent.class);
  +            TestPersistentClassType object3 = (TestPersistentClassType) pm.createInstance(TestPersistentClassType.class);
               object3.setDateVal(new java.util.Date());
               object3.setIntVal(i);
               object3.setFloatVal(i / 2);
  @@ -127,20 +128,20 @@
           Transaction transaction = pm.getTransaction();
           
           transaction.begin();
  -        java.util.Set objects = pm.findAll(TestPersistent.class);
  +        java.util.Set objects = pm.findAll(TestPersistentClassType.class);
           System.out.println("retrieved " + objects.size());
           java.util.Iterator i = objects.iterator();
           
           while (i.hasNext()) {
               
  -            TestPersistent object = (TestPersistent) i.next();
  -            System.out.println("ID       = " + object);
  -            System.out.println("BoolVal  = " + object.getBoolVal());
  -            System.out.println("DateVal  = " + object.getDateVal());
  -            System.out.println("IntVal   = " + object.getIntVal());
  -            System.out.println("FloatVal = " + object.getFloatVal());
  -            System.out.println("StrVal1   = " + object.getStrVal1());
  -            System.out.println("Parent Object   = " + object.getParent());
  +            TestPersistentClassType object = (TestPersistentClassType) i.next();
  +             object.toString();
  +             object.getBoolVal();
  +             object.getDateVal();
  +             object.getIntVal();
  +             object.getFloatVal();
  +             object.getStrVal1();
  +             object.getParent();
               
           }
           
  @@ -150,19 +151,20 @@
       public void testRollback() throws java.lang.Exception {
           
           _testCreate();
  +        
           _testRetrieve();
           
           Transaction transaction = pm.getTransaction();
           
           transaction.begin();
  -        java.util.Set objects = pm.findAll(TestPersistent.class);
  +        java.util.Set objects = pm.findAll(TestPersistentClassType.class);
           transaction.commit();
           
           java.util.Iterator i = objects.iterator();
           
           while (i.hasNext()) {
               transaction.begin();
  -            TestPersistent object = (TestPersistent) i.next();
  +            TestPersistentClassType object = (TestPersistentClassType) i.next();
               String val = object.getStrVal();
               object.setStrVal( i + "");
               transaction.rollback();
  @@ -173,7 +175,7 @@
           
           
           transaction.begin();
  -        TestPersistent object = (TestPersistent) pm.createInstance(TestPersistent.class);
  +        TestPersistentClassType object = (TestPersistentClassType) pm.createInstance(TestPersistentClassType.class);
           object.setStrVal("Test roolback on new created " + object);
           System.out.println(object.getStrVal());
           transaction.rollback();
  @@ -187,7 +189,7 @@
           transaction.commit();
           
           transaction.begin();
  -        object = (TestPersistent) pm.createInstance(TestPersistent.class);
  +        object = (TestPersistentClassType) pm.createInstance(TestPersistentClassType.class);
           object.setIntVal(777);
           transaction.commit();
           
  
  
  
  1.2       +2 -2      jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/storage.xml
  
  Index: storage.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/storage.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- storage.xml	28 Feb 2002 18:28:41 -0000	1.1
  +++ storage.xml	9 Mar 2002 19:07:49 -0000	1.2
  @@ -3,10 +3,10 @@
   <!DOCTYPE storage >
   
   <storage>
  -    <mclass id="org.apache.commons.simplestore.TestPersistent" name="TEST_PERSISTENT" oid="ID">
  +    <mclass id="org.apache.commons.simplestore.TestPersistentClassType" name="TEST_PERSISTENT" oid="ID">
           <field id="strVal1" name="s_1_str_val"/>
           <field id="parent" name="parent_object"/>
  -        <reference mclass="org.apache.commons.simplestore.TestPersistent" 
  +        <reference mclass="org.apache.commons.simplestore.TestPersistentClassType" 
                      field="parent"/>
       </mclass>
   </storage>
  
  
  
  1.1                  jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestPersistentClassType.java
  
  Index: TestPersistentClassType.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.commons.simplestore;
  
  /**
   *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
   *      baliuka@mwm.lt</a>
   *@version    $Id: TestPersistentClassType.java,v 1.1 2002/03/09 19:07:49 baliuka Exp $
   */
  public abstract class TestPersistentClassType implements TestPersistent{
     
      /** Creates a new instance of TestPersistentClassType */
      public TestPersistentClassType() {
      }
      
    public void doSomething(String arg){
     
      this.setStrVal("done Something " + arg);
      System.out.println(getStrVal());
     } 
    
     
     public abstract void setDateVal(java.util.Date val) ;
     
     public abstract void setBoolVal(boolean val) ;
     
     public abstract java.util.Date getDateVal() ;
     
     public abstract void setIntVal(int val); 
     
     public abstract void setFloatVal(float val) ;
     
     public abstract float getFloatVal() ;
     
     public abstract void setStrVal1(String strVal1); 
     
     public abstract void setStrVal(String strVal1); 
     
     
     public abstract String getStrVal(); 
     
     
     public abstract String getStrVal1(); 
     
     public abstract void setParent(TestPersistent tp); 
     
     public abstract int getIntVal(); 
     
     
     public abstract boolean getBoolVal(); 
     
     public abstract TestPersistent getParent(); 
     
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>