baliuka     02/03/04 14:51:16

  Modified:    simplestore/src/java/org/apache/commons/simplestore/tools
                        Enhancer.java
  Log:
  bug fixes for Enhancer
  
  Revision  Changes    Path
  1.8       +34 -56    
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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Enhancer.java     4 Mar 2002 22:11:40 -0000       1.7
  +++ Enhancer.java     4 Mar 2002 22:51:16 -0000       1.8
  @@ -63,7 +63,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]";>
    *      [EMAIL PROTECTED]</a>
  - *@version    $Id: Enhancer.java,v 1.7 2002/03/04 22:11:40 baliuka Exp $
  + *@version    $Id: Enhancer.java,v 1.8 2002/03/04 22:51:16 baliuka Exp $
    */
   public class Enhancer implements org.apache.bcel.Constants{
       
  @@ -140,7 +140,6 @@
               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));
  @@ -150,14 +149,9 @@
           }
           return result.getConstructor(new Class[]{ MethodInterceptor.class} ).
           newInstance(new Object[]{ih});
  -        
  -        
  -        
       }
       
       
  -    
  -    
       private static void addConstructor(ClassGen  cg ){
           
           String parentClass = cg.getSuperclassName();
  @@ -172,7 +166,6 @@
           }, 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));
  @@ -192,10 +185,17 @@
           
       }
       
  -    private static ClassGen getClassGen( String class_name, Class  parentClass){
  +    private static ClassGen getClassGen( String class_name, Class  
parentClass,Class [] interfaces){
           
  -        return new ClassGen( class_name , parentClass.getName(),
  +        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,Class interfaces 
[],java.util.HashMap methodTable )  {
  @@ -203,8 +203,8 @@
           String class_name = parentClass.getName() + ENHAVCED_CLASS_SUFIX;
           if(class_name.startsWith("java")){
               class_name =  ENHAVCED_CLASS_PREFIX + class_name;
  -        }  
  -        ClassGen  cg = getClassGen(class_name,parentClass);
  +        }
  +        ClassGen  cg = getClassGen(class_name,parentClass,interfaces);
           ConstantPoolGen cp = cg.getConstantPool(); // cg creates constant pool
           addHandlerField(cg);
           addConstructor(cg);
  @@ -213,7 +213,7 @@
           int invokeSuper  = addInvokeSupperRef(cp);
           java.util.Set methodSet = new java.util.HashSet();
           
  -        for(int j = 0; j <= (interfaces == null ? 0 : interfaces.length); j++   ) {
  +        for(int j = (interfaces == null ? 0 : interfaces.length); j == 0 ; j--  ) {
               java.lang.reflect.Method  methods[];
               if( j == 0 ){
                   methods = parentClass.getMethods();
  @@ -222,10 +222,10 @@
               }
               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)) ){
  +                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(methods[i]);
                       
                   }
  @@ -238,16 +238,13 @@
               cg.addMethod( generateMethod( method,fieldName,cg, 
before,after,invokeSuper ) );
               methodTable.put(fieldName,method);
           }
  -        
  -        
  -        
           JavaClass jcl = cg.getJavaClass();
           return  jcl;
  -        
       }
       
       
       private static void addMethodField(String fieldName, ClassGen cg ){
  +        
           ConstantPoolGen cp = cg.getConstantPool();
           FieldGen fg = new FieldGen( ACC_PUBLIC | ACC_STATIC  , METHOD_OBJECT , 
fieldName , cp);
           cg.addField(fg.getField());
  @@ -255,6 +252,7 @@
       }
       
       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) );
  @@ -312,11 +310,7 @@
                       il.append( new 
INVOKESPECIAL(cp.addMethodref(Float.class.getName(),CONSTRUCTOR_NAME, "(F)V")) );
                   }
                   
  -                
  -                
  -                
                   il.append( new AASTORE() );
  -                //  il.append( new DUP() );
                   
               }else{
                   il.append( new ALOAD( load++ ) );
  @@ -341,8 +335,8 @@
           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 ) ) );
  +            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 )  ){
  @@ -388,8 +382,6 @@
                   return il.append( new IRETURN());
               }
               
  -            
  -            
           }
           return null;
       }
  @@ -446,16 +438,9 @@
           }
           
           return null;
  -        
  -        
  -        
  -        
       }
  -    
  -    
       private static int loadArg(InstructionList il, Type t, int index,int pos ){
           
  -        
           if( t instanceof BasicType ){
               
               if( t.equals( Type.LONG )) {
  @@ -476,8 +461,6 @@
           }else{
               il.append(new ALOAD(pos));
               return ++pos;
  -            
  -            
           }
           
       }
  @@ -514,12 +497,12 @@
               
           }else return new ObjectType(cls.getName());
           throw new java.lang.InternalError(cls.getName());
  -        
       }
       
       
       private static MethodGen toMethodGen( java.lang.reflect.Method mtd,String 
className,
       InstructionList il ,ConstantPoolGen cp){
  +        
           Class args [] = mtd.getParameterTypes();
           Type arg_types [] =  new Type[ args.length ];
           for( int i = 0; i < arg_types.length; i++){
  @@ -528,9 +511,6 @@
           
           return new MethodGen(ACC_PUBLIC, toType( mtd.getReturnType() ) , arg_types ,
           null, mtd.getName(), className ,  il, cp);
  -        
  -        
  -        
       }
       
       private static  Method  generateMethod( java.lang.reflect.Method method,
  @@ -561,7 +541,7 @@
           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) );
  @@ -571,10 +551,10 @@
               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 ) );
  +            il.append( new ACONST_NULL() );
  +            il.append( new ASTORE( resutFromBefore ) );
           }
           //locals
           il.append( new ACONST_NULL() );
  @@ -615,15 +595,15 @@
               if( wrapper != null ){
                   il.append( initWrapper(mg.getReturnType(),cp) );
               }
  -           if( returnsValue ){ 
  -             ehEnd = il.append( new ASTORE(resultFromSuper) );
  -           }
  +            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 ) );
           }
           
  @@ -644,7 +624,6 @@
           il.append( new ALOAD(error) );
           il.append( new INVOKEINTERFACE(after,8) );
           
  -        
           InstructionHandle exitMethod =  
generateReturnValue(il,factory,cp,mg.getReturnType(),++loaded);
           
           if( !abstractM ){
  @@ -662,7 +641,6 @@
           
           return result;
       }
  -    
       
       static class MethodWrapper{
           java.lang.reflect.Method method;
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to