baliuka     02/03/07 14:02:23

  Modified:    simplestore/src/java/org/apache/commons/simplestore/tools
                        Enhancer.java
               simplestore/src/test/org/apache/commons/simplestore
                        TestEnhancer.java
  Log:
  Bug fixes for enhancer
  
  Revision  Changes    Path
  1.11      +11 -24    
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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Enhancer.java     6 Mar 2002 14:00:07 -0000       1.10
  +++ Enhancer.java     7 Mar 2002 22:02:23 -0000       1.11
  @@ -63,7 +63,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]";>
    *      [EMAIL PROTECTED]</a>
  - *@version    $Id: Enhancer.java,v 1.10 2002/03/06 14:00:07 baliuka Exp $
  + *@version    $Id: Enhancer.java,v 1.11 2002/03/07 22:02:23 baliuka Exp $
    */
   public class Enhancer implements org.apache.bcel.Constants{
       
  @@ -84,8 +84,8 @@
       static final  String CONSTRUCTOR_NAME      =  "<init>";
       static final  String FIELD_NAME            =  "h";
       static final  String SOURCE_FILE           =  "<generated>";
  -    static final  String ENHAVCED_CLASS_SUFIX  = "$$EnhancedBySimplestore$$";
  -    static final  String ENHAVCED_CLASS_PREFIX  = "org.apache.";
  +    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",
  @@ -112,7 +112,7 @@
       private static java.util.Map cache = new java.util.WeakHashMap();
       
       /** Creates a new instance of Enchancer */
  -    private Enhancer() {
  +    protected Enhancer() {
       }
       
       public static void setMethodInterceptor(Object enhanced, MethodInterceptor 
ih)throws Throwable{
  @@ -153,32 +153,17 @@
           return 
enhance(cls,null,interfaces,ih,Thread.currentThread().getContextClassLoader());
       }
       
  -    static class Handler implements java.lang.reflect.InvocationHandler{
  -        MethodInterceptor ih;
  -        Handler(MethodInterceptor ih){
  -            this.ih = ih;
  -        }
  -        
  -        public Object invoke(Object obj, java.lang.reflect.Method method, Object[] 
args) throws java.lang.Throwable {
  -            return ih.afterReturn( obj, method, args, null, false, null, null );
  -        }
  -        
  -    }
       
       public synchronized static Object enhance(Class cls,String class_name,Class 
interfaces[],  MethodInterceptor ih,ClassLoader loader)throws Throwable {
  -        // Use Standard way if we don't need to enhance any Class
  -        if( ( Object.class.equals(cls) || cls == null ) && class_name == null ){
  -            return java.lang.reflect.Proxy.newProxyInstance(loader,interfaces, new 
Handler(ih) );
  -        }
           
           if( cls == null ){
  -            cls = Object.class;
  +            cls = Enhancer.class;
           }
           
           if( class_name == null ){
  -            class_name = cls.getName() + ENHAVCED_CLASS_SUFIX;
  +            class_name = cls.getName() + CLASS_SUFIX;
               if(class_name.startsWith("java")){
  -                class_name =  ENHAVCED_CLASS_PREFIX + class_name;
  +                class_name =  CLASS_PREFIX + class_name;
               }
           }
           
  @@ -212,7 +197,8 @@
               }
               map.put(cls,result);
           }
  -        return result.getConstructor(new Class[]{ MethodInterceptor.class} ).
  +        return result.getConstructor(new Class[]{Class.forName( 
  +        MethodInterceptor.class.getName(),true,loader)} ).
           newInstance(new Object[]{ih});
       }
       
  @@ -275,9 +261,10 @@
           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 ALOAD( argArray  ) );  
           il.append( new INVOKESTATIC( addAfterConstructionRef(cp) ));
           il.append( new RETURN() );
  +      
           cg.addMethod( getMethod( costructor ) );
           
       }
  
  
  
  1.5       +6 -1      
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestEnhancer.java 6 Mar 2002 14:00:07 -0000       1.4
  +++ TestEnhancer.java 7 Mar 2002 22:02:23 -0000       1.5
  @@ -64,7 +64,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]";>
    *      [EMAIL PROTECTED]</a>
  - *@version    $Id: TestEnhancer.java,v 1.4 2002/03/06 14:00:07 baliuka Exp $
  + *@version    $Id: TestEnhancer.java,v 1.5 2002/03/07 22:02:23 baliuka Exp $
    */
   public class TestEnhancer  extends TestCase {
       
  @@ -95,6 +95,10 @@
       }
       public void testEnhance()throws Throwable{
           //test enchance vector:
  +        Object obj = Enhancer.enhance( null, "TESTEnhancer",new 
Class[]{TestPersistent.class},null,
  +        Thread.currentThread().getContextClassLoader()
  +        ); 
  +    
           java.util.Vector vector = (java.util.Vector)Enhancer.enhance(
           java.util.Vector.class,
           null,
  @@ -142,6 +146,7 @@
           
       });
       //TODO : Add meanigful asserts
  +    System.out.println( Enhancer.getMethodInterceptor(vector) ); 
       String value = "VALUE";
       vector.add(null);
       vector.elements();
  
  
  

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

Reply via email to