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/04/29 13:50:24 UTC

cvs commit: jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools Enhancer.java

baliuka     02/04/29 04:50:24

  Modified:    simplestore/src/java/org/apache/commons/simplestore/tools
                        Enhancer.java
  Log:
  Fixed bug
  
  Revision  Changes    Path
  1.21      +304 -291  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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- Enhancer.java	14 Apr 2002 19:43:45 -0000	1.20
  +++ Enhancer.java	29 Apr 2002 11:50:24 -0000	1.21
  @@ -102,59 +102,60 @@
   import org.apache.bcel.generic.Type;
   import org.apache.bcel.generic.ArrayType;
   /**
  -* this code returns Enhanced Vector to intercept  all methods for tracing
  -*   <pre>
  -*         java.util.Vector vector = (java.util.Vector)Enhancer.enhance(
  -*        java.util.Vector.class,
  -*        new Class[]{java.util.List.class},
  -*        
  -*        new MethodInterceptor(){
  -*                        
  -*            public Object beforeInvoke( Object obj,java.lang.reflect.Method method,
  -*            Object args[] )
  -*            throws java.lang.Throwable{
  -*                return null;
  -*            }
  -*            
  -*            public boolean invokeSuper( Object obj,java.lang.reflect.Method method,
  -*            Object args[], Object retValFromBefore )
  -*            throws java.lang.Throwable{
  -*                return true;
  -*            }
  -*            
  -*            
  -*        public Object afterReturn(  Object obj,     java.lang.reflect.Method method,
  -*        Object args[],  Object retValFromBefore,
  -*        boolean invokedSuper, Object retValFromSuper,
  -*        java.lang.Throwable e )throws java.lang.Throwable{
  -*            System.out.println(method);
  -*            return retValFromSuper;//return the same as supper
  -*        }
  -*        
  -*    });
  -* </pre>
  -*@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
  + * this code returns Enhanced Vector to intercept  all methods for tracing
  + *   <pre>
  + *         java.util.Vector vector = (java.util.Vector)Enhancer.enhance(
  + *        java.util.Vector.class,
  + *        new Class[]{java.util.List.class},
  + *
  + *        new MethodInterceptor(){
  + *
  + *            public Object beforeInvoke( Object obj,java.lang.reflect.Method method,
  + *            Object args[] )
  + *            throws java.lang.Throwable{
  + *                return null;
  + *            }
  + *
  + *            public boolean invokeSuper( Object obj,java.lang.reflect.Method method,
  + *            Object args[], Object retValFromBefore )
  + *            throws java.lang.Throwable{
  + *                return true;
  + *            }
  + *
  + *
  + *        public Object afterReturn(  Object obj,     java.lang.reflect.Method method,
  + *        Object args[],  Object retValFromBefore,
  + *        boolean invokedSuper, Object retValFromSuper,
  + *        java.lang.Throwable e )throws java.lang.Throwable{
  + *            System.out.println(method);
  + *            return retValFromSuper;//return the same as supper
  + *        }
  + *
  + *    });
  + * </pre>
  + *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: Enhancer.java,v 1.20 2002/04/14 19:43:45 baliuka Exp $
  + *@version    $Id: Enhancer.java,v 1.21 2002/04/29 11:50:24 baliuka Exp $
    */
  -public class Enhancer implements org.apache.bcel.Constants , Constants{
  +public class Enhancer implements org.apache.bcel.Constants ,
  +Constants{
  +    
       
  -
       
       static final String INTERCEPTOR_CLASS = MethodInterceptor.class.getName();
       static final ObjectType BOOLEAN_OBJECT =
  -        new ObjectType(Boolean.class.getName());
  +    new ObjectType(Boolean.class.getName());
       static final ObjectType INTEGER_OBJECT =
  -        new ObjectType(Integer.class.getName());
  +    new ObjectType(Integer.class.getName());
       static final ObjectType CHARACTER_OBJECT =
  -        new ObjectType(Character.class.getName());
  +    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());
  +    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";
  @@ -164,40 +165,40 @@
       static int index = 0;
       private static int addAfterConstructionRef(ConstantPoolGen cp) {
           return cp.addMethodref(
  -            Enhancer.class.getName(),
  -            "handleConstruction",
  -            "(Ljava/lang/Object;[Ljava/lang/Object;)V");
  +        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;");
  +        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");
  +        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;");
  +        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 {
  +    throws Throwable {
           enhanced.getClass().getField(FIELD_NAME).set(enhanced, ih);
       }
       public static MethodInterceptor getMethodInterceptor(Object enhanced)
  -        throws Throwable {
  +    throws Throwable {
           return (MethodInterceptor) enhanced.getClass().getField(FIELD_NAME).get(
  -            enhanced);
  +        enhanced);
       }
       public static void addConstructionHandler(ConstructionHandler ch) {
           costructionHandlers.add(ch);
  @@ -206,76 +207,88 @@
           costructionHandlers.remove(ch);
       }
       public static synchronized void handleConstruction(Object obj, Object args[])
  -        throws Throwable {
  +    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 {
  +    Class cls,
  +    Class interfaces[],
  +    MethodInterceptor ih)
  +    throws Throwable {
           return enhance(
  -            cls,
  -            null,
  -            interfaces,
  -            ih,
  -            Thread.currentThread().getContextClassLoader());
  +        cls,
  +        interfaces,
  +        ih,
  +        Thread.currentThread().getContextClassLoader());
       }
       public synchronized static Object enhance(
  -        Class cls,
  -        String class_name,
  -        Class interfaces[],
  -        MethodInterceptor ih,
  -        ClassLoader loader)
  -        throws Throwable {
  +    Class cls,
  +   /* String class_name, */ //it was not good idea
  +    Class interfaces[],
  +    MethodInterceptor ih,
  +    ClassLoader loader)
  +    throws Throwable {
           if (cls == null) {
  -            cls = Enhancer.class;
  +            cls = Object.class;
           }
  -        if (class_name == null) {
  -            class_name = cls.getName() + CLASS_SUFIX;
  -            if (class_name.startsWith("java")) {
  -                class_name = CLASS_PREFIX + class_name;
  +        
  +        StringBuffer key = new StringBuffer(cls.getName() + ";");
  +        if(interfaces != null){
  +            for(int i = 0; i< interfaces.length; i++ ){
  +                key.append(interfaces[i].getName());
               }
  -            if( cls == Enhancer.class )
  -               class_name += index;
           }
  +        
  +        
           java.util.Map map = (java.util.Map) cache.get(loader);
           if ( map == null ) {
               map = new java.util.HashMap();
               cache.put(loader, map);
           }
  -        Class result = (Class) map.get(class_name);
  +        
  +        Class result = (Class) map.get(key);
  +        
  +        
  +        
           if (result == null) {
  +            
  +               String class_name = cls.getName() + CLASS_SUFIX;
  +                if (class_name.startsWith("java")) {
  +                    class_name = CLASS_PREFIX + class_name;
  +                }
  +               class_name += index++;
  +            
  +            
               java.util.HashMap methods = new java.util.HashMap();
               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)});
  +            (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(class_name, result);
  +            map.put(key, result);
           }
           return result
  -            .getConstructor(
  -                new Class[] { Class.forName(MethodInterceptor.class.getName(), true, loader)})
  -            .newInstance(new Object[] { ih });
  +        .getConstructor(
  +        new Class[] { Class.forName(MethodInterceptor.class.getName(), true, loader)})
  +        .newInstance(new Object[] { ih });
       }
       private static void addConstructors(ClassGen cg, Class superClass)
  -        throws Throwable {
  +    throws Throwable {
           addConstructor(cg); //default
           java.lang.reflect.Constructor constructors[] = superClass.getConstructors();
           String parentClass = cg.getSuperclassName();
  @@ -284,8 +297,8 @@
           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)) {
  +            && parmTypes[0].equals(
  +            org.apache.commons.simplestore.tools.MethodInterceptor.class)) {
                   continue;
               }
               InstructionList il = new InstructionList();
  @@ -296,11 +309,11 @@
               il.append(new ASTORE(argArray));
               il.append(new ALOAD(0));
               il.append(
  -                factory.createFieldAccess(
  -                    cg.getClassName(),
  -                    FIELD_NAME,
  -                    new ObjectType(INTERCEPTOR_CLASS),
  -                    GETFIELD));
  +            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)));
  @@ -315,55 +328,55 @@
           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
  +        MethodGen costructor = new MethodGen(ACC_PUBLIC, // access flags
           Type.VOID, // return type
  -    new Type[] { // argument types
  +        new Type[] { // argument types
               new ObjectType(INTERCEPTOR_CLASS)}, null, // arg names
  -        CONSTRUCTOR_NAME, cg.getClassName(), il, cp);
  -        il.append(new ALOAD(0));
  -        il.append(
  +            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(
  +            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(
  +            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));
  +            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) {
           ConstantPoolGen cp = cg.getConstantPool();
           FieldGen fg =
  -            new FieldGen(ACC_PUBLIC, new ObjectType(INTERCEPTOR_CLASS), FIELD_NAME, cp);
  +        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) {
  +    String class_name,
  +    Class parentClass,
  +    Class[] interfaces) {
           ClassGen gen =
  -            new ClassGen(class_name, parentClass.getName(), SOURCE_FILE, ACC_PUBLIC, null);
  +        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());
  @@ -372,11 +385,11 @@
           return gen;
       }
       private static JavaClass enhance(
  -        Class parentClass,
  -        String class_name,
  -        Class interfaces[],
  -        java.util.HashMap methodTable)
  -        throws Throwable {
  +    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);
  @@ -396,13 +409,13 @@
               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))) {
  -                       
  +                && !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]);     
  +                        System.out.println("added:" + methods[i]);
                       }
                   }
               }
  @@ -420,14 +433,14 @@
       private static void addMethodField(String fieldName, ClassGen cg) {
           ConstantPoolGen cp = cg.getConstantPool();
           FieldGen fg =
  -            new FieldGen(ACC_PUBLIC | ACC_STATIC, METHOD_OBJECT, fieldName, cp);
  +        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) {
  +    InstructionList il,
  +    InstructionFactory factory,
  +    ConstantPoolGen cp,
  +    Type[] args) {
           int argCount = args.length;
           if (argCount > 5)
               il.append(new BIPUSH((byte) argCount));
  @@ -447,59 +460,59 @@
                       il.append(new DUP());
                       il.append(new ILOAD(load++));
                       il.append(
  -                        new INVOKESPECIAL(
  -                            cp.addMethodref(Boolean.class.getName(), CONSTRUCTOR_NAME, "(Z)V")));
  +                    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")));
  +                    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")));
  +                    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")));
  +                    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")));
  +                    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")));
  +                    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")));
  +                    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")));
  +                    new INVOKESPECIAL(
  +                    cp.addMethodref(Float.class.getName(), CONSTRUCTOR_NAME, "(F)V")));
                   }
                   il.append(new AASTORE());
               } else {
  @@ -516,11 +529,11 @@
           return mg.getMethod();
       }
       private static InstructionHandle generateReturnValue(
  -        InstructionList il,
  -        InstructionFactory factory,
  -        ConstantPoolGen cp,
  -        Type returnType,
  -        int stack) {
  +    InstructionList il,
  +    InstructionFactory factory,
  +    ConstantPoolGen cp,
  +    Type returnType,
  +    int stack) {
           if (returnType.equals(Type.VOID)) {
               return il.append(new RETURN());
           }
  @@ -528,108 +541,108 @@
           il.append(new ALOAD(stack));
           if ((returnType instanceof ObjectType) || ( returnType instanceof ArrayType) ) {
               if (returnType instanceof ArrayType){
  -                 il.append(new CHECKCAST(cp.addArrayClass((ArrayType)returnType)));
  -                 return il.append(new ARETURN()); 
  +                il.append(new CHECKCAST(cp.addArrayClass((ArrayType)returnType)));
  +                return il.append(new ARETURN());
               }
               if (!returnType.equals(Type.OBJECT)){
  -                 il.append(new CHECKCAST(cp.addClass((ObjectType) returnType)));
  -                 return il.append(new ARETURN()); 
  +                il.append(new CHECKCAST(cp.addClass((ObjectType) returnType)));
  +                return il.append(new ARETURN());
               }else {
  -              return il.append(new ARETURN()); 
  +                return il.append(new ARETURN());
               }
               
  -        } 
  +        }
           if (returnType instanceof BasicType) {
               if (returnType.equals(Type.BOOLEAN)) {
                   IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new ICONST(0) );
  -                il.append(new IRETURN());  
  +                il.append(new IRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
                   il.append(new CHECKCAST(cp.addClass(BOOLEAN_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        Boolean.class.getName(),
  -                        "booleanValue",
  -                        Type.BOOLEAN,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                Boolean.class.getName(),
  +                "booleanValue",
  +                Type.BOOLEAN,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new IRETURN());
               } else if (returnType.equals(Type.CHAR)) {
  -               IFNONNULL ifNNull = new IFNONNULL(null);
  +                IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new ICONST(0) );
  -                il.append(new IRETURN());  
  +                il.append(new IRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
                   il.append(new CHECKCAST(cp.addClass(CHARACTER_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        Character.class.getName(),
  -                        "charValue",
  -                        Type.CHAR,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                Character.class.getName(),
  +                "charValue",
  +                Type.CHAR,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new IRETURN());
               } else if (returnType.equals(Type.LONG)) {
                   IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new LCONST(0) );
  -                il.append(new LRETURN());  
  +                il.append(new LRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
                   il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        Number.class.getName(),
  -                        "longValue",
  -                        Type.LONG,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                Number.class.getName(),
  +                "longValue",
  +                Type.LONG,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new LRETURN());
               } else if (returnType.equals(Type.DOUBLE)) {
                   IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new DCONST(0) );
  -                il.append(new DRETURN());  
  +                il.append(new DRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
  -                         
  +                
                   il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        Number.class.getName(),
  -                        "doubleValue",
  -                        Type.DOUBLE,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                Number.class.getName(),
  +                "doubleValue",
  +                Type.DOUBLE,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new DRETURN());
               } else if (returnType.equals(Type.FLOAT)) {
                   IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new FCONST(0) );
  -                il.append(new FRETURN());  
  +                il.append(new FRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
                   il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        java.lang.Number.class.getName(),
  -                        "floatValue",
  -                        Type.FLOAT,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                java.lang.Number.class.getName(),
  +                "floatValue",
  +                Type.FLOAT,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new FRETURN());
               } else {
                   IFNONNULL ifNNull = new IFNONNULL(null);
                   il.append(ifNNull);
                   il.append(new ICONST(0) );
  -                il.append(new IRETURN());  
  +                il.append(new IRETURN());
                   ifNNull.setTarget(il.append(new ALOAD(stack)));
                   il.append(new CHECKCAST(cp.addClass(NUMBER_OBJECT)));
                   il.append(
  -                    factory.createInvoke(
  -                        Number.class.getName(),
  -                        "intValue",
  -                        Type.INT,
  -                        new Type[] {},
  -                        INVOKEVIRTUAL));
  +                factory.createInvoke(
  +                Number.class.getName(),
  +                "intValue",
  +                Type.INT,
  +                new Type[] {},
  +                INVOKEVIRTUAL));
                   return il.append(new IRETURN());
               }
           }
  @@ -661,28 +674,28 @@
           if (type instanceof BasicType) {
               if (type.equals(Type.BOOLEAN)) {
                   return new INVOKESPECIAL(
  -                    cp.addMethodref(Boolean.class.getName(), CONSTRUCTOR_NAME, "(Z)V"));
  +                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"));
  +                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"));
  +                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"));
  +                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"));
  +                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"));
  +                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"));
  +                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"));
  +                cp.addMethodref(Float.class.getName(), CONSTRUCTOR_NAME, "(F)V"));
               }
           }
           return null;
  @@ -739,7 +752,7 @@
                   return Type.BOOLEAN;
               }
           } else if (cls.isArray()) {
  -             return new ArrayType( toType(cls.getComponentType()),cls.getName().lastIndexOf('[') + 1);
  +            return new ArrayType( toType(cls.getComponentType()),cls.getName().lastIndexOf('[') + 1);
           } else
               return new ObjectType(cls.getName());
           throw new java.lang.InternalError(cls.getName());
  @@ -753,47 +766,47 @@
               pos = loadArg(il, args[i], i, pos);
           }
           il.append(
  -            new INVOKESPECIAL(
  -                cp.addMethodref(cg.getSuperclassName(), mg.getName(), mg.getSignature())));
  +        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) {
  +    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);
  +        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) {
  +    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);
  +        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) {
  -            
  +    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();
  @@ -804,7 +817,7 @@
           addMethodField(fieldName, cg);
           boolean returnsValue = !mg.getReturnType().equals(Type.VOID);
           boolean abstractM =
  -            java.lang.reflect.Modifier.isAbstract(method.getModifiers());
  +        java.lang.reflect.Modifier.isAbstract(method.getModifiers());
           InstructionHandle ehEnd = null;
           GOTO gotoHandled = null;
           IFEQ ifInvoke = null;
  @@ -819,11 +832,11 @@
           if (!abstractM) { // invoke before
               il.append(new ALOAD(0));
               il.append(
  -                factory.createFieldAccess(
  -                    cg.getClassName(),
  -                    FIELD_NAME,
  -                    new ObjectType(INTERCEPTOR_CLASS),
  -                    GETFIELD));
  +            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));
  @@ -846,11 +859,11 @@
           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));
  +            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));
  @@ -888,11 +901,11 @@
               gotoHandled.setTarget(endif);
           }
           il.append(
  -            factory.createFieldAccess(
  -                cg.getClassName(),
  -                FIELD_NAME,
  -                new ObjectType(INTERCEPTOR_CLASS),
  -                GETFIELD));
  +        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));
  @@ -902,7 +915,7 @@
           il.append(new ALOAD(error));
           il.append(new INVOKEINTERFACE(after, 8));
           InstructionHandle exitMethod =
  -            generateReturnValue(il, factory, cp, mg.getReturnType(), ++loaded);
  +        generateReturnValue(il, factory, cp, mg.getReturnType(), ++loaded);
           if (!abstractM) {
               mg.addExceptionHandler(ehStart, ehEnd, ehHandled, Type.THROWABLE);
           }
  @@ -934,10 +947,10 @@
           }
       }
       
  -   public static boolean equals(
  -            java.lang.reflect.Method m1,
  -        java.lang.reflect.Method m2) {
  -            
  +    public static boolean equals(
  +    java.lang.reflect.Method m1,
  +    java.lang.reflect.Method m2) {
  +        
           if (m1 == m2) {
               
               return true;
  @@ -948,21 +961,21 @@
               if (params1.length == params2.length) {
                   for (int i = 0; i < params1.length; i++) {
                       if (!params1[i].getName().equals( params2[i].getName() ) ) {
  -                              return false;
  +                        return false;
                       }
                   }
  -        
  -              if(!m1.getReturnType().getName().
  -                   equals(m2.getReturnType().getName()) ){
  -                 throw new java.lang.IllegalStateException(
  -                  "Can't implement:\n" + m1.getDeclaringClass().getName() +
  -                   "\n      and\n" + m2.getDeclaringClass().getName() + "\n"+
  -                     m1.toString() + "\n" + m2.toString());
  -              }           
  +                
  +                if(!m1.getReturnType().getName().
  +                equals(m2.getReturnType().getName()) ){
  +                    throw new java.lang.IllegalStateException(
  +                    "Can't implement:\n" + m1.getDeclaringClass().getName() +
  +                    "\n      and\n" + m2.getDeclaringClass().getName() + "\n"+
  +                    m1.toString() + "\n" + m2.toString());
  +                }
                   return true;
               }
           }
  -     
  +        
           return false;
       }
   }
  
  
  

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